我试图复制包含signalVersion: prod
的表中的所有行,但在重复的行中,我想将signalVersion
设置为0
。我的表中有两个键,signal_key
和signal_value
,两者都是json对象。signalVersion
是signal_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"}';