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
)