Свести агрегированные пары ключ / значение из поля JSONB?
я есть простая таблица postgres:
Column │ Type │ Modifiers
──────────────┼──────────────────────┼──────────────────────
id │ integer │ not null default
data │ jsonb │
Вот упрощенная структура данных дляdata
:
{
"id": 3,
"date": "2019-01-01",
"well_report_table":
[
{"element": "methane",
"yield": 6,
"price": 2.10
},
{"element": "pentane",
"yield": 6,
"price": 2.10
},
{"element": "butane",
"yield": 6,
"price": 3.50
}
],
"cost_report_table":
[
{"item": "fuel",
"charge": 6.30
},
{"item": "lease",
"charge": 200
}
]
}
Я хотел бы сгладить это в представлении с помощью следующих столбцов:
id | date | well_report_table_methane_yield | well_report_table_methane_price | well_report_table_pentane_yield | well_report_table_pentane_price | well_report_table_butane_yield | well_report_table_butane_price |cost_report_table_fuel_charge | cost_report_table_lease_charge
У объектов в моих массивах есть идентификатор, который я хотел бы добавить к имени объекта массива, а затем перебрать другие ключи в объекте и сделать столбцы из.
Этот вопрос приближает меня:Postgres: Свести агрегированные пары ключ / значение из поля JSONB?
Я не совсем уверен, что это возможно в чем-то вроде plpgsql, поэтому, если мне просто нужно сгенерировать текст представления на языке сценариев, таком как ruby / python, а затем создать представление из этого, я согласен с этим.
В идеале я смогу использовать что-то вродеjsonb_array_elements
а такжеjsonb_each
чтобы избежать промежуточных таблиц (все мои текущие попытки требуют промежуточных представлений), но я еще не нашел эту магическую комбинацию.