我有一个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]]
我想在postgres中存储这个2D数组。我检查了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]
然后我将列类型设置为什么?
答案 0 :(得分:2)
如果类型不同,它不再是一个数组。数组只能有一种基本类型。您将不得不使用复合类型的数组。
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
,因为你说它是一个"字符串",尽管样本数据表明不同。)