Postgres banyak kolom ke json


23

Saya menjalankan postgresql 9.3.4. Saya punya tabel dengan 3 bidang:

id   name  addr
---  ----  ----
1    n1    ad1
2    n2    ad2
...

Saya perlu memindahkan data ke tabel baru dengan bidang seperti:

id   data
---  ----
1    {'name': 'n1', 'addr': 'ad1'}
2    {'name': 'n2', 'addr': 'ad2'}
...

row_to_jsonbukan solusi bagi saya karena SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) tmenambah idhasil juga. Apakah ada cara untuk memilih bidang yang saya butuhkan (nama & addr) di bidang data saya?


Saya tidak yakin apakah jawabannya benar. Saya menanyakannya 2 tahun lalu. Saya juga menjawab pertanyaan saya saat itu tetapi tidak menandainya sebagai benar.
AliBZ

Jawaban:


52

Ada opsi yang lebih baik json_build_object()di Postgres 9.4+ :

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

Tetapi ada juga cara yang lebih sederhana dan lebih cepat row_to_json()dalam Postgres 9.3 :

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

db <> biola di sini
Old SQL Fiddle di Postgres 9.6.

Jawaban terkait:


Ini adalah jawaban yang lebih baik, dan biola memiliki buktinya.
MIguelele

5

Saya menemukan jawabannya dari tautan ini :

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
)

Jangan lupa untuk menandai jawaban Anda sendiri sebagai benar (tidak ada poin :-(). Saya tidak berpikir bahwa Anda dapat melakukan ini dengan segera, tetapi mungkin membantu seseorang dengan pertanyaan serupa di masa depan.
Vérace

2
Selain dari tabel yang hilang alias di kueri luar, ini juga lebih kompleks dan mahal daripada yang diperlukan. Saya menambahkan jawaban lain dengan biola untuk diperagakan.
Erwin Brandstetter
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.