PostgreSQL 9.5 - 合并NULL和JSON时,更新操作不起作用

8

我的用户表包含一列类型为jsonmetadata列。 现在,我想要添加新的元数据到一个用户,并保留现有的值。 所以我使用||运算符来合并两个JSON对象:

UPDATE users
SET metadata = metadata::jsonb || '{"test": true}'::jsonb
WHERE id=...
RETURNING *;

如果已经存在一些元数据,一切工作都很正常。但是,当先前的值为 NULL 时,更新操作将无法正常进行。更新后的 metadata 仍然是 NULL

如何改进查询,使其在先前的值为 NULL 时设置新的 JSON 对象,否则合并先前和新的值?

1个回答

14

添加 COALESCE:

UPDATE users
SET metadata = coalesce(metadata::jsonb,'{}'::jsonb) || '{"test": true}'::jsonb
WHERE id=...
RETURNING *;

它的工作方式类似于普通字符串,NULL || something 始终为 NULL。


哇!它有帮助。非常感谢你! - Flushed
1
合并部分变得更简单了:coalesce(metadata, '{}')::jsonb - tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接