在 PostgreSQL 中使用 NULL 值更新 JSONB 列

Nic*_*ach 3 sql postgresql json sql-update jsonb

我正在尝试更新以下内容y.data,它是当前包含 NULL 值的 JSONB 类型列。该||命令似乎无法y.datax.datawhen x.datais NULL 合并在一起。x.data当包含 JSONB 值时它工作正常。

这是一个示例查询。

UPDATE x
SET x.data = y.data::jsonb || x.data::jsonb
FROM (VALUES ('2018-05-24', 'Nicholas', '{"test": "abc"}')) AS y (post_date, name, data)
WHERE x.post_date::date = y.post_date::date AND x.name = y.name;
Run Code Online (Sandbox Code Playgroud)

x.data修改此查询以支持更新具有现有值或为 NULL 的行的最佳方法是什么?

GMB*_*GMB 5

将任何内容与nullProduce连接起来null。您可以使用coalesce()或 条件逻辑来解决此问题:

SET x.data = COALESCE(y.data::jsonb || x.data, y.data::jsonb)
Run Code Online (Sandbox Code Playgroud)

或者:

SET x.data = CASE WHEN x.data IS NULL 
    THEN y.data::jsonb
    ELSE y.data::jsonb || x.data
END
Run Code Online (Sandbox Code Playgroud)

请注意,无需显式转换x.datajsonb,因为它jsonb已经是一列。