【问题标题】:PostgreSQL 9.5 - update doesn't work when merging NULL with JSONPostgreSQL 9.5 - 将 NULL 与 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 对象,否则合并之前的值和新的值?

【问题讨论】:

    标签: json postgresql postgresql-9.5


    【解决方案1】:

    添加合并:

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

    它的工作原理与普通字符串类似,NULL || something 始终为 NULL

    【讨论】:

    • 哇!它有帮助。非常感谢!
    • 合并部分变得更加简单:coalesce(metadata, '{}')::jsonb
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多