PostgreSQL 9.5 - 将 NULL 与 JSON 合并时更新不起作用
PostgreSQL 9.5 - update doesn't work when merging NULL with JSON
我的 users
table 包含类型 json
的 metadata
列。
现在,我想在保留现有值的同时向用户添加新的元数据。
所以我使用 ||
运算符合并 2 个 JSON 对象:
UPDATE users
SET metadata = metadata::jsonb || '{"test": true}'::jsonb
WHERE id=...
RETURNING *;
当已有一些元数据时,一切正常。
但是,当先前的值为 NULL
时,更新将不起作用。更新后的metadata
还是NULL
.
我如何改进我的查询,以便它在以前的值为 NULL
时设置新的 JSON 对象,否则合并以前的值和新的值?
添加合并:
UPDATE users
SET metadata = coalesce(metadata::jsonb,'{}'::jsonb) || '{"test": true}'::jsonb
WHERE id=...
RETURNING *;
它的工作原理与普通字符串相似NULL || something
始终为 NULL
我的 users
table 包含类型 json
的 metadata
列。
现在,我想在保留现有值的同时向用户添加新的元数据。
所以我使用 ||
运算符合并 2 个 JSON 对象:
UPDATE users
SET metadata = metadata::jsonb || '{"test": true}'::jsonb
WHERE id=...
RETURNING *;
当已有一些元数据时,一切正常。
但是,当先前的值为 NULL
时,更新将不起作用。更新后的metadata
还是NULL
.
我如何改进我的查询,以便它在以前的值为 NULL
时设置新的 JSON 对象,否则合并以前的值和新的值?
添加合并:
UPDATE users
SET metadata = coalesce(metadata::jsonb,'{}'::jsonb) || '{"test": true}'::jsonb
WHERE id=...
RETURNING *;
它的工作原理与普通字符串相似NULL || something
始终为 NULL