mycolumn
是jsonb类型,默认值为空数组。
如果新值不存在,我想更新此数组。
选择查询:
SELECT mycolumn FROM mytable WHERE id = 1;
返回:
[]
更新查询:
UPDATE mytable SET mycolumn = mycolumn || '[{"foo":"bar"}]' WHERE id = 1;
选择返回:
[{"foo":"bar"}]
如果更新查询运行多次,它会将值追加到数组中。
再次运行update,选择returns
[{"foo":"bar"},{"foo":"bar"}]
等。是否有更新
mycolumn
数组值的等幂方法? 最佳答案
如果“部分”安全壳不在工作台上,那么安全壳操作员(<@
和@>
)对您没有好处。您需要检查每个元素是否相等:
with append(a) as (
values (jsonb '{"foo":"bar"}')
)
update mytable
set mycolumn = mycolumn || a
from append
where id = 1
and not exists(
select 1
from jsonb_array_elements(mycolumn) e
where e = a
)
注意:如果愿意重复要“插入”的JSON对象,则可以避免使用CTE(
WITH
子句)。http://rextester.com/IAHE54266
关于arrays - 如果对象不存在,则将对象连接到数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43379660/