PostgreSQL 9.5 - 将NULL与JSON合并时更新不起作用

时间:2016-12-22 13:49:33

标签: json postgresql postgresql-9.5

我的users表包含metadatajson列。 现在,我想在保留现有值的同时向用户添加新元数据。 所以我使用||运算符来合并2个JSON对象:

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

当已有一些现有元数据时,一切正常。 但是,当前一个值为NULL时,更新不起作用。更新后的metadata仍为NULL

如何改进我的查询,以便在前一个值为NULL时设置新的JSON对象,或者合并前一个值和新值?

1 个答案:

答案 0 :(得分:5)

添加合并:

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

它与普通字符串类似,NULL || something始终为NULL