web-dev-qa-db-ja.com

jsonに複数の列をPostgres

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) tidも結果に追加するため、私にとっては解決策ではありません。データフィールドで必要なフィールド(名前とアドレス)を選択する方法はありますか?

25
AliBZ

私は 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
)
7
AliBZ

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。

関連する回答:

57