簡體   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