繁体   English   中英

如何更新 PostgreSQL 数据库中 JSONB 数组中的“键”

[英]How to UPDATE "key" in JSONB array in PostgreSQL DB

我想更新 PostgreSQL 数据库中的 JSONB 数组,但我得到的大多数解决方案都是更新值而不是键。 我的目标是将键“SpindSpeed_Med”更改为“SpindleSpeed”,将“RapidOveride_Med”更改为“RapidOverride”。

查询以创建示例数据库:

CREATE TABLE test (
    uid int,
    tooldata jsonb
);

INSERT INTO test (uid, tooldata) 
VALUES (1, '[
  {
    "Ftn": 1,
    "SpindSpeed_Med": 1234,
    "RapidOveride_Med": 100
  },
  {
    "Ftn": 2,
    "SpindSpeed_Med": 1234,
    "RapidOveride_Med": 100
  },
  {
    "Ftn": 3,
    "SpindSpeed_Med": 1234,
    "RapidOveride_Med": 100
  }]'),
(2, '[
  {
    "Ftn": 1,
    "SpindSpeed_Med": 1234,
    "RapidOveride_Med": 100
  },
  {
    "Ftn": 2,
    "SpindSpeed_Med": 1234,
    "RapidOveride_Med": 100
  },
  {
    "Ftn": 3,
    "SpindSpeed_Med": 1234,
    "RapidOveride_Med": 100
  }
]');

^更新了多行并添加了 uid

预期结果:

[{"Ftn": 1, "SpindleSpeed": 1234, "RapidOverride": 100}, 
{"Ftn": 2, "SpindleSpeed": 1234, "RapidOverride": 100},
{"Ftn": 3, "SpindleSpeed": 1234, "RapidOverride": 100}] 

我试过使用“jsonb_set”,但这只会改变值部分而不是键。 此外,我使用了“jsonb_object_keys”和“jsonb_array_elements”的组合,但结果只给出了键,我无法将它放回数组中。 提前致谢!

select jsonb_agg (q2) from (
  select json_agg(
    j::jsonb - 'SpindSpeed_Med' ||
    jsonb_build_object('SpindleSpeed', j->'SpindSpeed_Med')
  )
from (
    select jsonb_array_elements(tooldata) as j from jsontest
) as q) as q2 ;

首先,将 jsonb 数组拆分为行,删除“SpindSpeed_Med”,为每一行添加“SpindleSpeed”,最后组合回 jsonb。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM