JSON에 여러 열을 Postgres n1

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할 수 있는 해결책이 아닙니다 . 내 데이터 필드에서 필요한 필드 (이름 및 주소)를 선택하는 방법이 있습니까?



답변

json_build_object()Postgres 9.4+ 에는 더 나은 옵션이 있습니다 .

SELECT id, json_build_object('name', name, 'addr', addr) AS data
FROM   myt;

그러나 row_to_json()Postgres 9.3 에는 더 간단하고 빠른 방법이 있습니다 .

SELECT id, row_to_json((SELECT d FROM (SELECT name, addr) d)) AS data
FROM   myt;

db <> fiddle here Postgres 9.6의
이전 SQL 바이올린 .

관련 답변 :


답변

이 링크 에서 답을 찾았습니다 .

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
)