Есть ли способ генерировать столбцы в представлении на основе данных строки таблицы?
У меня есть эта таблица, которая содержит настройки приложения, и я просто хочу показать его в представлении. Данные каждого параметра сохраняются в виде строки.
Code (varchar64)| Value (varchar1000)
----------------------
ALLOW_MAC_ADDR | 1
----------------------
ALLOW_SAVE | 1
----------------------
USER_ALIAS | James
Теперь это где-то довольно сложно, я должен преобразовать эти строки в jsonb
на вид. Ключ для value
Имя столбца должно основываться на значении Code
данные столбца.
Вот пример предпочтительного jsonb:
[dt:{ALLOW_MAC_ADDR: 1, ALLOW_SAVE: 1, USER_ALIAS: 'James'}]
Я думаю сделать что-то подобное на мой взгляд:
SELECT .. FROM generate_jsonb()
Так как же мне добиться такого jsonb?
РЕДАКТИРОВАТЬ: я использую v9.6, если это помогает.
1 ответ
Решение
https://www.postgresql.org/docs/current/static/functions-json.html
агрегатная функция json_object_agg, которая агрегирует пары значений в объект JSON
например:
t=# create table tt(code text, value text);
CREATE TABLE
t=# insert into tt values('ALLOW_MAC_ADDR',1),('USER_ALIAS','James');
INSERT 0 2
t=# select json_object_agg(code,value) from tt;
json_object_agg
----------------------------------------------------
{ "ALLOW_MAC_ADDR" : "1", "USER_ALIAS" : "James" }
(1 row)