我address在students表中有一個列,它實際上存盤了一個 JSON 物件,但它是text出于遺留原因的型別。現在,要獲取 json 物件中任何這些鍵的值,我使用 postgres 型別轉換::運算子和 json->運算子,如圖所示
select address::jsonb->'pincode' from students where id='xyz';
此查詢回傳具有 id 的學生的正確密碼xyz。現在讓我們說,我想更新一個學生的密碼,現在,如果我做類似的事情
update students set address::jsonb->'pincode'='182741' where id='abc';
我收到這個錯誤
ERROR: syntax error at or near "::"
我知道我可以覆寫整個列的值,但如果你只想更新一個鍵,那需要做很多事情。誰能幫我理解為什么我們不能在這里使用型別轉換運算子?僅更新 JSON 物件中的一個鍵的正確方法是什么?
uj5u.com熱心網友回復:
jsonb_set從這里使用JSON 函式。
create table students (id integer, address varchar);
insert into students values (1, '{"name": "Adrian", "pincode": 1234}');
select address::jsonb->'pincode' from students where id=1;
1234
update students set address = jsonb_set(address::jsonb, '{pincode}', '182741') where id =1;
select * from students;
id | address
---- ---------------------------------------
1 | {"name": "Adrian", "pincode": 182741}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504852.html
標籤:sql PostgreSQL jsonb
