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
も結果に追加するため、私にとっては解決策ではありません。データフィールドで必要なフィールド(名前とアドレス)を選択する方法はありますか?
私は this link からの回答を見つけました:
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
)
json_build_object()
を使用したより良いオプションがPostgres9.4にあります+:
_SELECT id, json_build_object('name', name, 'addr', addr) AS data
FROM myt;
_
しかし、Postgresで row_to_json()
を使用するより簡単で高速な方法もあります9.3:
_SELECT id, row_to_json((SELECT d FROM (SELECT name, addr) d)) AS data
FROM myt;
_
db <> fiddle ここ
Old SQL Fiddle on Postgres 9.6。
関連する回答: