Postgres кілька стовпців до json


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
Old SQL Fiddle on Postgres 9.6.

Відповідні відповіді:


Це краща відповідь, і скрипка має докази.
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
)

Не забувайте позначати власну відповідь правильною (хоча немає балів :-(). Я не думаю, що ви можете це зробити негайно, але це може допомогти комусь із подібним питанням у майбутньому.
Верес

2
Окрім відсутнього псевдоніма таблиці у зовнішньому запиті, це також складніше і дорожче, ніж потрібно. Я додав ще одну відповідь із скрипкою, щоб продемонструвати.
Erwin Brandstetter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.