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

Using PostgreSQL, how do I find all records that have the jsonb column filled out?

假设我有一个名为 "data" 的 jsonb 列类型用于 table "recipes"。我正在尝试查找已填写 "data" 的所有记录(即 "data" 不为空或空括号 {})。

我知道 hstore 列,使用 ruby,你可以使用这样的查询来做到这一点:

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

是否有 jsonb 的等效查询?

正确阅读问题后更新:

您可以像这样检查没有数据的列

SELECT * FROM table WHERE json_column IS NOT NULL

所以这就是

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

对于像这样具有非空散列的列:

SELECT * 来自 table WHERE json_column <> '{}'

这转化为:

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 <> '{}')"

对比

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