使用PostgreSQL,如何查找填写了jsonb列的所有记录?

时间:2016-04-11 05:49:50

标签: ruby ruby-on-rails-3 postgresql hstore jsonb

我们说我有一个名为"数据"的jsonb列类型。对于表"食谱"。我试图查找所有包含"数据"的记录。填写(即"数据"不为空或空括号{})。

我知道对于hstore列,使用ruby,你可以使用这样的查询来执行此操作:

Recipe.where("data <> ''")

是否存在jsonb的等效查询?

1 个答案:

答案 0 :(得分:1)

正确阅读问题后更新:

您可以检查没有数据的列

SELECT * FROM table WHERE json_column IS NOT NULL

那么这就是

Recipe.where.not('data IS NULL')

对于具有非空哈希的列,如下所示:

SELECT * FROM table WHERE json_column&lt;&gt; &#39; {}&#39;

这转换为:

Recipe.where('data <> ?', '{}')
# or
Recipe.where("data <> '{}'")

验证查询的一个好方法是首先在SQL中运行它们(这样可以避免AR及其将Ruby转换为SQL)。然后,您可以尝试在AR中构建查询,并使用to_sql查看AR对您的查询的影响。

Recipe.where('data <> ?', '{}').to_sql
#=> "SELECT \"recipies\".* FROM \"recipies\" WHERE (data <> '{}')"

VS。

Recipe.where('data <> ?', {}).to_sql
#=> "SELECT \"recipies\".* FROM \"recipies\" WHERE (data <> NULL)"