数组

列可以包含数组,这些数组存储相同类型元素的有序列表。例如,地址列可以使用字符串数组来存储个人可能拥有的多个地址,例如 ['668 SW New Lane', '518 Main Ave', '7040 Campfire Dr']

数组有两种类型:

  • 原生数组:基元类型的一维数组。

  • 非原生数组:所有其他受支持的数组,包括含有其他数组(多维数组)或结构体 (ROW) 的数组。非原生数组存在一些使用限制

使用 ARRAY 类型定义数组列,以指定其元素的类型(基元类型、ROW(结构体)或数组):

=> CREATE TABLE orders
   (orderkey    INT,
    custkey     INT,
    prodkey     ARRAY[VARCHAR(10)],
    orderprices ARRAY[DECIMAL(12,2)],
    orderdate   DATE
   );

如果数组是多维数组,则将其表示为包含数组的数组:

ARRAY[ARRAY[FLOAT]]

查询

请参阅数组和集(集合)

限制

  • 原生数组仅支持原始类型的数据,例如 int、UUID 等。

  • 强制执行数组维数。列不能包含不同维度的数组。例如,包含三维数组的列只能包含其他三维数组;它不能同时包含一个一维数组。但是,一列中的数组大小可能不同,其中一个数组可以包含四个元素,而另一个数组包含十个元素。

  • 如果指定了数组边界,则对所有加载或更改数据的操作强制执行。无界数组可能包含与分配的二进制大小一样多的元素。

  • 数组具有最大二进制大小。如果在定义数组时未设置此大小,则使用默认值。

  • 数组不支持 LONG 类型(如 LONG VARBINARY 或 LONG VARCHAR)或用户定义类型(如 Geometry)。