我在 Postgres 9.6 db 中有一个表,其结构如下:
Table "public.pricings"
Column | Type | Modifiers
---------------------------+-----------------------------+-------------------------------------------------------
id | integer | not null default nextval('pricings_id_seq'::regclass)
unconfirmed_matrix_prices | jsonb | not null default '"{}"'::jsonb
我是使用 jsonb 的新手。
我想搜索任何为空的 unconfirmed_matrix_prices(即默认值)。我看到我可以做这样的事情:
solar_dev=# select count(*) from json_object_keys('{"f1":1,"f2":2}');
count
-------
2
(1 row)
有没有办法我可以做一个 json_object_keys 等于 0 的 where 短语?我知道一些迂回的方法 - 有更好的方法吗?
您可以简单地检查该值是否为默认值,例如:
注意空的jsonb值应该写成'{}',所以默认值不是空的jsonb。这可能对某种查询有问题,例如使用
jsonb_each().
我建议以如下方式更正默认值的函数:这是一个非常糟糕的主意。
那不是存储一个空对象。那是存储一个 JSONB 字符串文字
"{}"
。你永远不想要那个。您通常希望将其限制为特定的子类型,例如这样..您通常也不想让它不为空。如果我需要这种约束,我宁愿使用可空对象并防止空对象。这大大简化了您的查询(如此处所示)。