Я храню двумерные массивы данных в postgresql, используя две таблицы:
- A
series
таблица, которая содержит метаданные о каждом двумерном массиве, включая список меток для каждого столбца в массиве. . - Таблица
series_row
, в которой хранятся фактические данные, включая индекс строки (временная метка в моем случае) и sql Массив значений для каждого столбца в этой строке двумерного массива.
Каждая серия (двумерный массив) имеет фиксированную ширину, но разные серии могут иметь разную ширину.
Приведенные ниже примеры данных содержат две серии. В Series 1 есть 4 строки и 3 столбца, а в Series 2 - 2 строки и 2 столбца.
db=# SELECT id, column_names FROM series;
id | column_names
----+------------------
1 | {var1,var2,var3}
2 | {var4,var5}
(2 rows)
db=# SELECT series_id, datetime, values FROM series_row;
series_id | datetime | values
-----------+-------------------------------+--------------
1 | 2020-04-26 11:02:24.802391-04 | {1,200,60}
1 | 2020-04-26 11:02:36.138249-04 | {1.1,210,61}
1 | 2020-04-26 11:02:43.001983-04 | {1.2,220,62}
1 | 2020-04-26 11:02:52.321589-04 | {1.3,230,63}
2 | 2020-04-26 11:03:17.394004-04 | {1000,5000}
2 | 2020-04-26 11:03:26.76255-04 | {2000,6000}
(6 rows)
Как можно вернуть значения строк ряда, каждое из которых является отдельным столбцом?
Например, ответ на запрос для серии 1 будет выглядеть следующим образом:
datetime | var1 | var2 | var3 |
-------------------------------+------+------+------+
2020-04-26 11:02:24.802391-00 | 1 | 200 | 60 |
2020-04-26 11:02:36.138249-00 | 1.1 | 210 | 61 |
2020-04-26 11:02:43.001983-00 | 1.2 | 220 | 62 |
2020-04-26 11:02:52.321589-00 | 1.3 | 230 | 63 |
Кажется, что есть два компонента для этого, сглаживая значения массива в столбцах в строке и совмещая их на основе COLUMN_NAMES. Решение может предполагать, что длина всех series_row.values в серии равна по длине series.column_names. Возможно ли это?