Вопрос:
У меня есть таблица в моем db, в которой есть столбец, содержащий записи json.
id | json_records —+————- 0 | «[{‘x1’ : 1234, ‘x2’ : 5678},{‘x1’ : 2345, ‘x2′ : 6789}]’ 1 | «[{‘x1’ : 4321, ‘x2’ : 8765},{‘x1’ : 5432, ‘x2′ : 9876}]’
Я хотел бы получить что-то вроде этого:
id | x1 | x2 —+——+—— 0 | 1234 | 5678 0 | 2345 | 6789 1 | 4321 | 8765 1 | 5432 | 9876
но мне не удается заставить запрос работать:
select json_populate_recordset(json_records) from my_table
Несколько примеров, которые я видел с помощью json_populate_recordset, вставляют результаты в таблицу, но я просто пытаюсь вернуть результаты. Есть ли способ сделать это, не создавая новую таблицу?
Лучший ответ:
Вам нужно создать новый тип для передачи функции (обратите внимание, что при возврате json_populate a json_type вам нужно использовать обозначение (row).* для получения отдельных полей):
CREATE type json_type AS (x1 int, x2 int); SELECT id, (json_populate_recordset(null::json_type, json_records)).* FROM my_table;