postgresql:向 json 列添加/更新具有数组值的键

问题描述 投票:0回答:0

我有一个数据类型为 json 的“数据”列,它可能是空的

{ }
或者可能已经包含一些键:
{ "category": "alpha", "verified": true }
我想要一个
notes
键,它将是一个文本数组。如果它不存在,
UPDATE
查询应该使用提供的文本创建它,否则它应该添加它(索引位置在追加时无关紧要)。

总会有一个音符被添加到

notes
键。

目前,我是这样做的:

SELECT data::jsonb ? 'notes' FROM my_table WHERE id = 1;

如果为假,我创建密钥并提供第一个值:

UPDATE my_table
SET data = jsonb_set(coalesce(data::jsonb,'{}'), '{notes}', '["Add"]'::jsonb)
WHERE id = 1;

如果它存在,我追加到同一个数组:

UPDATE my_table
SET data = jsonb_set(data::jsonb, array['notes'], (data->'notes')::jsonb || '["Update"]'::jsonb)
WHERE id = 1;

这可以在一次操作中完成吗?我最终将编写一个函数来更新该表的其他列并根据需要添加/更新注释。

json postgresql sql-update jsonb jsonb-array-elements
© www.soinside.com 2019 - 2024. All rights reserved.