【问题标题】:Store a 2D array in postgres在 postgres 中存储一个二维数组
【发布时间】:2018-06-03 03:04:54
【问题描述】:

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

[['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 中。我查看了 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]

那我把列类型设置成什么?

【问题讨论】:

标签: sql postgresql


【解决方案1】:

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

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,因为你说它是一个“字符串”,尽管示例数据表明不同。)

【讨论】:

    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多