New in v1.1:ARRAY 数据类型是存储了非array类型的一维度,一索引的相同类型元素的数组。

ARRAY数据类型对于确保与ORM和其他工具的兼容性非常有用。但是,如果不考虑这种兼容性,则可以更灵活地使用规范化表来设计schema。

CockroachDB不支持嵌套数组,同时不支持在数组上创建数据库索引以及不支持按数组排序。

语法

数据类型“ARRAY”的值可以通过以下方式表示:

大小

ARRAY值的大小是可变的,但建议将值保持在1 MB以下以保证性能;高于该阈值,写入放大和其他因素可能导致显着的性能下降。

示例

通过附加方括号创建数组列

> CREATE TABLE a (b STRING[]);
> INSERT INTO a VALUES (ARRAY['sky', 'road', 'car']);
> SELECT * FROM a;
+----------------------+
|          b           |
+----------------------+
| {"sky","road","car"} |
+----------------------+
(1 row)

通过添加术语ARRAY创建数组列

> CREATE TABLE c (d INT ARRAY);
> INSERT INTO c VALUES (ARRAY[10,20,30]);
> SELECT * FROM c;
+------------+
|     d      |
+------------+
| {10,20,30} |
+------------+
(1 row)

使用数组索引访问数组元素

CockroachDB中的数据是单索引的。

> SELECT * FROM c;
+------------+
|     d      |
+------------+
| {10,20,30} |
+------------+
(1 row)
> SELECT d[2] FROM c;
+------+
| d[2] |
+------+
|   20 |
+------+
(1 row)

将元素追加到数组中

使用array_append函数

> SELECT * FROM c;
+------------+
|     d      |
+------------+
| {10,20,30} |
+------------+
(1 row)
> UPDATE c SET d = array_append(d, 40) WHERE d[3] = 30;
> SELECT * FROM c;
+---------------+
|       d       |
+---------------+
| {10,20,30,40} |
+---------------+
(1 row)

使用append(||)运算符

> SELECT * FROM c;
+---------------+
|       d       |
+---------------+
| {10,20,30,40} |
+---------------+
(1 row)
> UPDATE c SET d = d || 50 WHERE d[4] = 40;
> SELECT * FROM c;
+------------------+
|        d         |
+------------------+
| {10,20,30,40,50} |
+------------------+
(1 row)

支持的转换(New in v2.0)

当数组的数据类型支持转换时,支持在ARRAY值之间进行转换。 例如,可以从BOOL数组转换为INT数组,但不能从BOOL数组转换为TIMESTAMP数组:

> SELECT ARRAY[true,false,true]::INT[];
+--------------------------------+
|       ARRAY[true, false,       |
|          true]::INT[]          |
+--------------------------------+
| {1,0,1}                        |
+--------------------------------+
(1 row)
> SELECT ARRAY[true,false,true]::TIMESTAMP[];
pq: invalid cast: bool[] -> TIMESTAMP[]

See Also

Data Types