Sql 在postgres中存储二维数组

Sql 在postgres中存储二维数组,sql,postgresql,Sql,Postgresql,我有一个二维数组,如下所示 [['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.292

我有一个二维数组,如下所示

[['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]]
我想在postgres中存储这个2D数组

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']]);
对于同时包含字符串值的列表,我们使用
text[][]
,但正如您所看到的,我有一个字符串和一个浮点作为列表的内容

['2018-05-15',6.7580658761256265]


那么我应该将列类型设置为什么呢?

如果类型不同,它就不再是数组了。数组只能有一个基类型。您必须改用复合类型的数组

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]);

但是,如果可能的话,可以考虑不使用数组,还有一个表和一个规范化的模式。也可以考虑使用<代码>日期>代码>而不是<代码>文本< /代码>,如果它实际上是一个日期。(我刚才使用了

text
,因为你说它是一个“字符串”,尽管样本数据显示的情况不同。)

可能重复的