JSON에 여러 열을 Postgres


23

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


대답이 맞는지 잘 모르겠습니다. 나는 2 년 전에 그것을 물었다. 나는 또한 내 질문에 대답했지만 올바른 것으로 표시하지 않았습니다.
AliBZ

답변:


52

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 바이올린 .

관련 답변 :


이것은 더 나은 대답이며, 바이올린에는 증거가 있습니다.
MIguelele

5

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

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
)

자신의 답변을 올바른 것으로 표시하는 것을 잊지 마십시오 (:-()). 나는 이것을 즉시 할 수 있다고 생각하지는 않지만 앞으로 비슷한 질문을하는 사람에게 도움이 될 수 있습니다.
Vérace

2
외부 쿼리에서 누락 된 테이블 별칭 외에도이 방법은 필요보다 복잡하고 비용이 많이 듭니다. 나는 설명하기 위해 바이올린으로 또 다른 대답을 추가했습니다.
Erwin Brandstetter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.