Postgresql
Postgres多列到json
我正在執行 postgresql 9.3.4。我有一個包含 3 個欄位的表:
id name addr --- ---- ---- 1 n1 ad1 2 n2 ad2 ...
我需要將數據移動到具有以下欄位的新表中:
id data --- ---- 1 {'name': 'n1', 'addr': 'ad1'} 2 {'name': 'n2', 'addr': 'ad2'} ...
row_to_json
對我來說不是解決方案,因為它也SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t
增加id
了結果。有沒有辦法在我的數據欄位中選擇我需要的欄位(名稱和地址)?
我從這個連結找到了答案:
select * from ( select id, ( select row_to_json(d) from ( select name, addr from myt d where d.id=s.id ) d ) as data from myt s )
在Postgres 9.5或更高版本中使用運算符
jsonb - text → jsonb
刪除單個鍵最簡單- 在使用. (如果您不想要,請將結果轉換為。)to_jsonb()
json``jsonb
SELECT id, to_jsonb(t.*) - 'id' AS data FROM myt t;
在Postgres 10或更高版本中,您還可以使用operator
jsonb - text[] → jsonb
刪除整個鍵數組。
json_build_object()
在Postgres 9.4或更高版本中還有一個更好的選擇:SELECT id, json_build_object('name', name, 'addr', addr) AS data FROM myt;
但是自Postgres 9.3以來還有一種更簡單的方法:
SELECT id, to_json((SELECT d FROM (SELECT name, addr) d)) AS data FROM myt;
在小提琴中找到更多的語法變體。
db<>fiddle here
舊sqlfiddle (Postgres 9.6)
相關答案: