我使用的是Postgres 9.6,我有一个JSONB列,其中一些行的值为NULL
,有些行的值为{"notify": false}
。
我想用更多字典键/值对更新列值。
UPDATE accounts SET notifications = jsonb_set(notifications, '{"alerts"}', 'false');
适用于我已经拥有{"notify": false}
等值的情况。最终结果符合预期{"alerts": false, "notifications": false}
。
但是我试图更新我们NULL
的价值,数据库中没有更新任何内容。
您能否告诉我如何更新NULL
值,因此最终结果将是{"notify": false}
等值。最终结果符合预期{"alerts": false}
答案 0 :(得分:11)
使用coalesce()
:
UPDATE accounts
SET notifications = jsonb_set(coalesce(notifications, '{}'), '{"alerts"}', 'false')
甚至更简单:
UPDATE accounts
SET notifications = coalesce(notifications, '{}') || '{"alerts": false}'
答案 1 :(得分:1)
请注意,某些版本的 Postgres 具有不支持 jsonb 的 coalesce() 函数,并且在尝试使用已接受的答案时会出现这样的错误:
ERROR: function coalsece(jsonb, unknown) does not exist
您可以通过使用 case 语句来解决这个问题。丑陋,但有效。
UPDATE accounts
SET notifications =
jsonb_set(
case
when notifications is null then '{}'
else notifications
end,
'{"alerts"}','false')