Хранить 2D массив в postgres - PullRequest
0 голосов
/ 23 мая 2018

У меня есть 2D-массив, который выглядит ниже

[['2018-05-15', 6.7580658761256265], ['2018-05-16', 7.413963464926804], ['2018-05-17', 8.801776892107043], ['2018-05-18', 10.292505686766823], ['2018-05-19', 10.292505686766823], ['2018-05-20', 10.292505686766823], ['2018-05-21', 10.292505686766823]]

Я хочу сохранить этот 2D-массив в postgres. Я проверил документацию postgres https://www.postgresql.org/docs/9.1/static/arrays.html и нашел приведенный ниже пример

CREATE TABLE sal_emp (
    name            text,
    pay_by_quarter  integer[],
    schedule        text[][]
);

INSERT INTO sal_emp
    VALUES ('Bill',
    ARRAY[10000, 10000, 10000, 10000],
    ARRAY[['meeting', 'lunch'], ['training', 'presentation']]);

Для списка, который содержит оба его значения в виде строки ['meeting', 'lunch'], мы используем text[][] Но, как вы можете видеть, у меня есть одна строка и одна переменная в качестве содержимого списка

['2018-05-15', 6.7580658761256265]

Тогда как мне установить тип столбца как?

1 Ответ

0 голосов
/ 23 мая 2018

Это больше не массив, если типы разные.Массивы могут иметь только один базовый тип.Вместо этого вам придется использовать массив составного типа.

CREATE TYPE your_type AS (text_member text,
                          float_member float);

CREATE TABLE your_table
             (your_type_column your_type[]);

INSERT INTO your_table
            (your_type_column)
            VALUES (array[row('2018-05-15',
                              6.7580658761256265)::your_type,
                          row('2018-05-16',
                              7.413963464926804)::your_type,
                          ...
                          row('2018-05-21',
                              10.292505686766823)::your_type]);

Но, возможно, стоит рассмотреть возможность вообще не использовать массивы, если это возможно, иметь другую таблицу и нормализованную схему.Также рассмотрите возможность использования date вместо text, если это на самом деле дата.(Я просто использовал text, потому что вы сказали, что это «строка», хотя данные примера показывают по-другому.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...