获取空hstore的记录

mba*_*jur 7 postgresql activerecord pg hstore

我正在使用带有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 """"
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我这样的查询应该在纯SQL中看起来如何?

mvp*_*mvp 7

{}是无效的表达式HSTORE.

相反,使用表达式hstore('')甚至只是''表示空HSTORE,如下所示:

Video.where("vd_data != ''")
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示中的证明.

  • 与MySQL或SQLite不同,在PostgreSQL中使用单引号和双引号存在很大差异.要表示字符串值,必须始终使用单引号.要转义标识符名称,必须使用双引号. (2认同)