我的users
表包含metadata
类json
列。
现在,我想在保留现有值的同时向用户添加新元数据。
所以我使用||
运算符来合并2个JSON对象:
UPDATE users
SET metadata = metadata::jsonb || '{"test": true}'::jsonb
WHERE id=...
RETURNING *;
当已有一些现有元数据时,一切正常。
但是,当前一个值为NULL
时,更新不起作用。更新后的metadata
仍为NULL
。
如何改进我的查询,以便在前一个值为NULL
时设置新的JSON对象,或者合并前一个值和新值?
答案 0 :(得分:5)
添加合并:
UPDATE users
SET metadata = coalesce(metadata::jsonb,'{}'::jsonb) || '{"test": true}'::jsonb
WHERE id=...
RETURNING *;
它与普通字符串类似,NULL || something
始终为NULL