J'utilise postgresql 9.3.4. J'ai une table avec 3 champs:
id name addr
--- ---- ----
1 n1 ad1
2 n2 ad2
...
J'ai besoin de déplacer les données vers une nouvelle table avec des champs comme:
id data
--- ----
1 {'name': 'n1', 'addr': 'ad1'}
2 {'name': 'n2', 'addr': 'ad2'}
...
row_to_json
N'est pas la solution pour moi car SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) t
ajoute également id
au résultat. Existe-t-il un moyen de choisir les champs dont j'ai besoin (nom et adresse) dans mon champ de données?
J'ai trouvé la réponse de ce lien :
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
)
Il y a une meilleure option avec json_build_object()
dans Postgres 9.4 + :
SELECT id, json_build_object('name', name, 'addr', addr) AS data
FROM myt;
Mais il existe aussi un moyen plus simple et plus rapide avec row_to_json()
dans Postgres 9.3 :
SELECT id, row_to_json((SELECT d FROM (SELECT name, addr) d)) AS data
FROM myt;
db <> violon ici
Ancien SQL Fiddle sur Postgres 9.6.
Réponses associées: