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 的时区?

Linux CentOS 7 安装PostgreSQL 9.5 --步骤详解

CentOS 7 源码编译安装PostgreSQL 9.5