Выбрать запрос в функции row_to_json

Например, Я использую следующую функцию для преобразования rows в json в PostgreSQL 9.2

select row_to_json(row(productid, product)) from gtab04;

и это вернет результаты ниже

row_to_json
---------------
{"f1":3029,"f2":"DIBIZIDE M TAB"}
{"f1":3026,"f2":"MELMET 1000 SR TAB"}
{"f1":2715,"f2":"GLUCORED FORTE"}
{"f1":3377,"f2":"AZINDICA 500 TAB"}
  • К сожалению, он теряет имена полей и заменяет их на f1, f2, f3 и т.д.
  • Как получить фактические имена полей или имя поля заливки?

Ответ 1

Чтобы обойти это, мы должны либо создать тип строки, либо применить строку к этому типу, либо использовать подзапрос. Подзапрос обычно будет проще.

select row_to_json(t)
from (
   select productid, product from gtab04
) t

Ответ 2

Если кто-то хочет предотвратить подзапрос, json_build_object() может быть решением. Он не отображает имя столбца, но позволяет явно задавать ключи JSON.


запрос

SELECT json_build_object('productid', productid, 'product', product) FROM gtab04;

json_build_object                                
------------------
{"productid":3029,"product":"DIBIZIDE M TAB"}
{"productid":3026,"product":"MELMET 1000 SR TAB"}
{"productid":2715,"product":"GLUCORED FORTE"}  
{"productid":3377,"product":"AZINDICA 500 TAB"}

Посмотреть на БД Fiddle