使用空的hstore获取记录

10

我正在使用带有hstore扩展的PostgreSQL数据库,我想要做的事情非常简单——获取所有记录,其中vd_data(hstore)列为空({})。

听起来很容易,但是我自己无法做到,也找不到任何关于它的信息。我正在我的Rails应用程序中使用它,因此我将发布一些使用activerecord DSL的示例:

Video.where('vd_data != NULL')
# => [] (empty result. I have about 20 videos with vd_data populated in my db)

Video.where('vd_data != {}')
# => Syntax error

Video.where('vd_data != ""')
# => ERROR:  zero-length delimited identifier at or near """"

有人能够指导我如何在纯 SQL 中编写这样的查询吗?
1个回答

9

{}不是HSTORE的有效表达式。

相反,使用表达式hstore('')或甚至简单地使用''来表示空的HSTORE,就像这样:

Video.where("vd_data != ''")

SQLFiddle演示中的证明。


哦,现在我明白了。我试图使用 Video.where('vd_data != ""'),但它给了我一个语法错误,所以我放弃了那个方法。太好了,谢谢! - mbajur
2
与MySQL或SQLite不同,PostgreSQL在使用单引号和双引号时有很大的区别。为了表示字符串值,您必须始终使用单引号。为了转义标识符名称,您必须使用双引号。 - mvp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接