代码之家  ›  专栏  ›  技术社区  ›  AKang123.

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

  •  0
  • AKang123.  · 技术社区  · 2 年前

    我正在尝试复制表中包含 signalVersion: prod 但是在重复的行中,我想设置 signalVersion 0 . 我的桌子上有两把钥匙, signal_key signal_value 两者都是json对象。 信号版本 是列中对象的属性 . 下面是一个示例 信号_键 :

    {
      "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"}';
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Bergi    2 年前

    你会想使用 || operator 要合并 {"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"}';