我想在PostgreSQL表中查询所有具有空hstore的行。除了我之外,对所有人来说都是显而易见的,因为我找不到任何关于如何做到这一点的文档,也没有找到回答问题的其他StackOverflow问题。检查NULL是没有用的,因为我收回所有行,甚至那些properties
没有键/值的行:
SELECT widgets.*
FROM "widgets"
WHERE properties IS NOT NULL
任何想法如何做到这一点?
答案 0 :(得分:4)
一个选项是将列的所有键作为数组返回并检查该数组是否为空:
SELECT *
FROM widgets
WHERE properties IS NOT NULL
AND array_length(akeys(properties),1) > 0;
答案 1 :(得分:2)
根据message on the PostgreSQL listerve执行此操作的更简单方法是:
NULL
作为一般规则,我建议您有时候为空的列和其他时间BOOLEAN
,除了您需要语义差异的不同情况之外在那里,例如对于以不同方式解释两者的应用程序。特别是对于ALTER TABLE widgets ALTER COLUMN properties SET NOT NULL;
-- OR:
ALTER TABLE widgets ADD CONSTRAINT its_null_or_nothin CHECK ( properties <> ''::HSTORE );
列,我通常会选择防止这种额外的自由度。
我经常做一些类似的事情:
hstore('{}'::TEXT[])
根据您更容易记住的内容,您还可以通过{{1}}创建一个空的hstore。