Postgres più colonne su json


23

Sto eseguendo postgresql 9.3.4. Ho una tabella con 3 campi:

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

Devo spostare i dati in una nuova tabella con campi come:

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

row_to_jsonnon è la soluzione per me in quanto SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) taggiunge anche idal risultato. C'è un modo per scegliere i campi di cui ho bisogno (nome e indirizzo) nel mio campo dati?


Non sono sicuro che la risposta sia corretta. L'ho chiesto 2 anni fa. Allora ho anche risposto alla mia domanda ma non l'ho contrassegnata come corretta.
AliBZ,

Risposte:


52

C'è un'opzione migliore con json_build_object()Postgres 9.4+ :

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

Ma c'è anche un modo più semplice e veloce con row_to_json()Postgres 9.3 :

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

db <> violino qui
Vecchio SQL Fiddle su Postgres 9.6.

Risposte correlate:


Questa è una risposta migliore e il violino ha la prova.
Gioguelele,

5

Ho trovato la risposta da questo 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
)

Non dimenticare di contrassegnare la tua risposta come corretta (nessun punto però :-(). Non credo che tu possa farlo immediatamente, ma potrebbe aiutare qualcuno con una domanda simile in futuro.
Vérace,

2
A parte l'alias di tabella mancante nella query esterna, questo è anche più complesso e costoso del necessario. Ho aggiunto un'altra risposta con un violino per dimostrare.
Erwin Brandstetter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.