获取空 hstore 的记录

Posted

技术标签:

【中文标题】获取空 hstore 的记录【英文标题】:Get records with empty hstore 【发布时间】:2014-06-29 12:11:15 【问题描述】:

我正在使用带有 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】:

不是HSTORE 的有效表达式。

改为使用表达式hstore('') 甚至简单的'' 来表示空的HSTORE,如下所示:

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

SQLFiddle Demo 中的证明。

【讨论】:

哦,现在我明白了。我正在尝试Video.where('vd_data != ""'),它给了我一个语法错误,所以我离开了那个轨道。太好了,谢谢! mysql 或 SQLite 不同,在 PostgreSQL 中使用单引号和双引号有很大的不同。要表示字符串值,您必须始终使用单引号。要转义标识符名称,您必须使用双引号。

以上是关于获取空 hstore 的记录的主要内容,如果未能解决你的问题,请参考以下文章

HBase里的HStore

Postgres 聚合 Hstore

PostgreSQL hstore:使用索引提高LIKE性能?

Django ORM & hstore:计算键的唯一值

hstore或json数据的Django数字比较?

通过 SQLAlchemy 到 PostgreSQL HSTORE 的 Python 列表