Собственно, не лучший способ сделать это с моими возможностями PostgreSQL не так уж и хорош, но он работает.
Запрос
SELECT
((rawData.values)::json->'date')::json->'year' AS year
, ((rawData.values)::json->'date')::json->'month' AS month
, ((rawData.values)::json->'date')::json->'day' AS day
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param1') AS param1
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param2') AS param2
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param3') AS param3
FROM
rawData
demo https://www.db -fiddle.com / f / jZhYLEvdSERzLCDyoAJz65 / 1
Запростакже работает, когда массивы param1, param2, param3 имеют разную длину.
demo https://www.db -fiddle.com / f / jZhYLEvdSERzLCDyoAJz65 / 4
Спасибо за ваш ответ, пока работает.Единственное, что я забыл, так это то, что мне нужен индекс как отдельный столбец.Итак, индекс элементов массива.Любая идея
Это возможно с GENERATE_SERIES в сочетании с JSON_ARRAY_LENGTH
Запрос
SELECT
((rawData.values)::json->'date')::json->'year' AS year
, ((rawData.values)::json->'date')::json->'month' AS month
, ((rawData.values)::json->'date')::json->'day' AS day
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param1') AS param1
, GENERATE_SERIES(1, JSON_ARRAY_LENGTH(((rawData.values)::json->'data')::json->'param1')) AS param1_array_index
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param2') AS param2
, GENERATE_SERIES(1, JSON_ARRAY_LENGTH(((rawData.values)::json->'data')::json->'param2')) AS param2_array_index
, JSON_ARRAY_ELEMENTS(((rawData.values)::json->'data')::json->'param3') AS param3
, GENERATE_SERIES(1, JSON_ARRAY_LENGTH(((rawData.values)::json->'data')::json->'param3')) AS param3_array_index
FROM
rawData
смотри демо https://www.db -fiddle.com/f/jZhYLEvdSERzLCDyoAJz65/6