PostgreSQL 9.5 - 将 NULL 与 JSON 合并时更新不起作用
Posted
技术标签:
【中文标题】PostgreSQL 9.5 - 将 NULL 与 JSON 合并时更新不起作用【英文标题】:PostgreSQL 9.5 - update doesn't work when merging NULL with JSON 【发布时间】:2016-12-22 13:49:32 【问题描述】:我的users
表包含metadata
类型的json
列。
现在,我想在保留现有值的同时向用户添加新元数据。
所以我使用||
运算符来合并 2 个 JSON 对象:
UPDATE users
SET metadata = metadata::jsonb || '"test": true'::jsonb
WHERE id=...
RETURNING *;
当已有一些元数据时,一切正常。
但是,当先前的值为 NULL
时,更新不起作用。更新后的metadata
还是NULL
。
如何改进我的查询,以便在之前的值为 NULL
时设置新的 JSON 对象,否则合并之前的值和新的值?
【问题讨论】:
【参考方案1】:添加合并:
UPDATE users
SET metadata = coalesce(metadata::jsonb,''::jsonb) || '"test": true'::jsonb
WHERE id=...
RETURNING *;
它的工作原理与普通字符串类似,NULL || something
始终为 NULL
【讨论】:
哇!它有帮助。非常感谢! 合并部分变得更加简单:coalesce(metadata, '')::jsonb
以上是关于PostgreSQL 9.5 - 将 NULL 与 JSON 合并时更新不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Linux CentOS 7 安装PostgreSQL 9.5(源码编译)
PostgreSQL 9.5 - 行级安全/ROLE 最佳实践
CentOS 7 安装配置使用 PostgreSQL 9.5
如何在 docker 上更改 postgreSQL 9.5 的时区?