如何查询PostgreSQL以获取hstore为空的所有记录?

时间:2013-11-01 14:34:53

标签: postgresql

我想在PostgreSQL表中查询所有具有空hstore的行。除了我之外,对所有人来说都是显而易见的,因为我找不到任何关于如何做到这一点的文档,也没有找到回答问题的其他StackOverflow问题。检查NULL是没有用的,因为我收回所有行,甚至那些properties没有键/值的行:

SELECT widgets.* 
FROM "widgets" 
WHERE properties IS NOT NULL

任何想法如何做到这一点?

2 个答案:

答案 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。