重复行,但更新json中的字段



我试图复制包含signalVersion: prod的表中的所有行,但在重复的行中,我想将signalVersion设置为0。我的表中有两个键,signal_keysignal_value,两者都是json对象。signalVersionsignal_key列中对象的属性。下面是signal_key的一个例子:

{
"signalType": "OCR_ITEM", 
"signalVersion": "prod"
}

这是我到目前为止写的代码,但它失败了。有人知道为什么我的语法不正确吗?

insert into signals (signal_key, signal_value)
select signal_key -> '{"signalVersion": "0"}', signal_value
from signals
where signal_key @> '{"signalVersion": "prod"}';

您需要使用||操作符将{"signalVersion": "0"}合并到signal_key中,而不是->:

insert into signals (signal_key, signal_value)
select signal_key || '{"signalVersion": "0"}', signal_value
from signals
where signal_key @> '{"signalVersion": "prod"}';
或者,您可以使用json_set:
insert into signals (signal_key, signal_value)
select json_set(signal_key, array['signalVersion'], 0), signal_value
from signals
where signal_key @> '{"signalVersion": "prod"}';