PostgreSQL

PostgreSQL 知识量:10 - 51 - 182

3.11 数组类型><

定义数组类型- 3.11.1 -

在 PostgreSQL 中,数组是一种特殊的数据类型,用于存储一维或多维的列表。数组可以存储任何数据类型,包括基本数据类型(如整数、文本等)和自定义数据类型。

要定义一个数组类型,需要指定数组的元素类型和数组的维度。下面是一个示例,展示如何定义一个整数类型的二维数组:

CREATE TYPE my_array_type AS ARRAY[2][3] OF INTEGER;

在上面的示例中,my_array_type 是一个二维数组类型,包含 2 行和 3 列,元素类型为 INTEGER。

也可以在创建表时定义数组类型的列,例如:

CREATE TABLE my_table (  
    id SERIAL PRIMARY KEY,  
    my_array_column my_array_type  
);

在上面的示例中,my_table 包含一个名为 my_array_column 的列,其数据类型为 my_array_type。

输入数组- 3.11.2 -

要输入数组数据,可以使用大括号 {} 将数组元素括起来,并使用逗号分隔每个元素。

以下是一个示例,展示如何在 PostgreSQL 中输入数组数据:

INSERT INTO my_table (my_array_column) VALUES ('{1,2,3}');

在上面的示例中,my_table 是包含一个名为 my_array_column 的数组类型列的表。通过使用大括号将数组元素括起来,并使用逗号分隔每个元素,可以输入一个整数类型的数组。

还可以输入其他类型的数组,例如文本类型、日期类型等。只需将数组元素的数据类型与列的数据类型匹配即可。

需要注意的是,数组的长度和元素类型必须与列的定义相匹配。如果数组的长度或元素类型与列的定义不匹配,将导致插入操作失败。

访问数组- 3.11.3 -

在 PostgreSQL 中,可以使用数组索引来访问数组中的元素。数组索引从 1 开始,而不是从 0 开始。可以使用方括号 [] 来访问数组元素。

下面是一个示例,展示如何访问数组中的元素:

-- 创建一个包含整数的数组  
SELECT ARRAY[1, 2, 3, 4, 5];  
  
-- 访问数组中的第一个元素  
SELECT [1] FROM ARRAY[1, 2, 3, 4, 5];  
  
-- 访问数组中的最后一个元素  
SELECT [5] FROM ARRAY[1, 2, 3, 4, 5];  
  
-- 访问数组中的任意元素(例如第三个元素)  
SELECT [3] FROM ARRAY[1, 2, 3, 4, 5];

还可以使用多维数组,并使用逗号分隔的索引来访问特定位置的元素。例如,以下是如何访问二维数组的示例:

-- 创建一个二维数组  
SELECT ARRAY[[1,2,3],[4,5,6],[7,8,9]];  
  
-- 访问二维数组中的特定元素(例如第一行第二列的元素)  
SELECT [1,2] FROM ARRAY[[1,2,3],[4,5,6],[7,8,9]];

还可以使用切片来访问数组的子集。例如,以下是如何获取数组的子集的示例:

-- 创建一个数组  
SELECT ARRAY[10,20,30,40,50];  
  
-- 获取数组的前三个元素(切片操作)  
SELECT [1:3] FROM ARRAY[10,20,30,40,50];

这将返回一个新的数组 {10,20,30},其中包含原始数组的前三个元素。同样,可以使用 : 来获取子集的起始和结束索引。例如,[2:4] 将返回一个包含第3、4和5个元素的数组(在 PostgreSQL 中,索引从1开始)。

修改数组- 3.11.4 -

在 PostgreSQL 中,可以使用以下方法来修改数组:

1. 替换数组的所有元素:
要替换数组的所有元素,可以使用 ARRAY 构造器或 ARRAY_CAT 函数。例如,以下查询将替换 my_table 表中 my_array_column 列的所有元素:

UPDATE my_table SET my_array_column = ARRAY[1, 2, 3];

这将把 my_array_column 列的所有元素替换为 {1,2,3}。

2. 更新数组中的一个元素:
要更新数组中的一个元素,可以使用数组索引。以下查询将更新 my_table 表中 my_array_column 列的第二个元素为 5:

UPDATE my_table SET my_array_column[2] = 5;

这将把 my_array_column 列的第二个元素替换为 5。

3. 通过串接操作扩大数组的长度:
要扩大数组的长度,可以使用 ARRAY_CAT 函数。以下查询将 my_table 表中的 my_array_column 列与新数组 {6,7,8} 进行串接:

UPDATE my_table SET my_array_column = ARRAY_CAT(my_array_column, ARRAY[6,7,8]);

这将把 my_array_column 列的长度增加到原来的长度加上新数组的长度。

注意:在进行数组操作时,要确保数组的长度和元素类型与表中的定义相匹配,否则可能会导致错误。

查找数组中的内容- 3.11.5 -

在 PostgreSQL 中,可以使用数组运算符 ANY 来查找数组中的内容。ANY 运算符用于检查数组中的元素是否满足特定的条件。

下面是一个示例,演示如何使用 ANY 运算符来查找符合条件的记录:

SELECT * FROM my_table WHERE 3 = ANY(my_array_column);

在上面的查询中,my_table 是包含名为 my_array_column 的数组类型列的表。查询将返回 my_array_column 列中包含数字 3 的所有记录。

也可以使用 ALL 运算符来查找数组中的所有元素是否满足特定的条件。下面是一个示例:

SELECT * FROM my_table WHERE 3 = ALL(my_array_column);

这个查询将返回 my_array_column 列中所有元素都为数字 3 的所有记录。

数组运算符- 3.11.6 -

在 PostgreSQL 中,数组运算符用于对数组进行各种操作和比较。以下是一些常用的数组运算符:

  • ||:连接两个数组,将它们串联成一个新的数组。 

  • ||=:将一个数组追加到另一个数组的末尾。

  • &:返回两个数组的交集。 

  • &&:返回两个数组的并集。

  • @>:检查一个数组是否包含另一个数组的所有元素。

  • <@:检查一个数组是否被另一个数组包含。

  • ||>:将一个数组添加到另一个数组的右侧,并返回新的数组。

  • ||<:将一个数组添加到另一个数组的左侧,并返回新的数组。