PostgreSQL 数组:函数、类型、示例

⚡ 智能摘要

PostgreSQL 数组功能允许您将表列定义为任何有效数据类型的数组。它涵盖了创建数组列、使用 ARRAY 构造函数或花括号插入值、查询和修改元素以及使用 ANY() 进行搜索。

  • 📦 定义: 任何 PostgreSQL 数据类型具有匹配的数组类型,例如 integer[]。
  • 🧱 创建和插入: 使用 TEXT[] 列和 ARRAY 构造函数或花括号。
  • 🔎 查询: 使用下标访问元素;第一个元素位于位置 1。
  • ✏️ 修改和搜索: 使用 ANY() 更新单个元素和搜索值。
  • 扩大: unnest() 函数将数组值拆分成单独的行。

PostgreSQL 排列

什么是 PostgreSQL 大批?

In PostgreSQL我们可以将列定义为有效数据类型的数组。数据类型可以是内置类型、用户自定义类型或枚举类型。除此之外,数组在以下方面也扮演着重要角色: PostgreSQL.

每一个对应的 PostgreSQL 数据类型都对应着一个相应的数组类型。例如,整数数据类型对应整数数组类型[],字符数据类型对应字符数组类型[],依此类推。

创造 PostgreSQL 阵列

在以下示例中,我们将创建一个名为 Employees 的表,其中联系人列定义为文本数组:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

该命令应该可以成功运行。

创造 PostgreSQL 阵列

插入 PostgreSQL 数组值

现在让我们 将值放入上表中:

INSERT INTO Employees
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

插入应该可以成功运行。

插入 PostgreSQL 数组值

第三列(即联系人)的值已作为数组插入。这是通过使用 ARRAY 构造函数实现的。在本例中,我们用方括号 [] 将它们括起来。员工 Alice John 有两个联系人。

我们仍然可以使用花括号 {},如下所示:

INSERT INTO Employees
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   (
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

该命令应该可以成功运行。

插入 PostgreSQL 数组值

上述语句将在 Employees 表中插入两行。使用花括号时,数组括在单引号 (') 中,而文本数组项括在双引号 (") 中。

查询数组数据

要查询数组元素,我们使用 SELECT 语句。要查看 Employees 表的内容,我们运行以下命令:

SELECT * FROM Employees;

这将返回以下内容:

查询数组数据

数组列(即 contact)的元素用花括号 {} 括起来。要访问数组元素本身,我们在方括号 [] 内添加下标。数组中的第一个元素位于位置 1。

例如,我们需要获取员工姓名,对于有多个联系人的员工,我们只需要获取他们的第一个联系人信息。我们可以通过 contact[1] 来访问这些信息。让我们来看一下:

SELECT name, contact[1]
FROM Employees;

这将返回以下内容:

查询数组数据

我们可以使用 SELECT 语句和 WHERE 子句,根据数组列筛选行。例如,要查看第二个联系人为 (408)-567-78234 的员工,我们可以运行以下命令:

SELECT
   name
FROM
   Employees
WHERE
   contact [ 2 ] = '(408)-567-78234';

这将返回以下内容:

查询数组数据

修改 PostgreSQL 排列

您可以更新数组中的所有元素或单个元素。以下是 Employees 表的内容:

修改 PostgreSQL 排列

让我们更新员工 James Bush 的第二个电话号码,他的 ID 为 3:

修改 PostgreSQL 排列

运行以下命令:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

该命令应该可以成功运行:

修改 PostgreSQL 排列

让我们查询表来检查更改是否成功:

修改 PostgreSQL 排列

修改成功。

在搜索中 PostgreSQL 排列

目前,我们的员工表如下:

在搜索中 PostgreSQL 排列

假设我们需要知道联系人 (408)-783-5731 的所有者是谁,而无需考虑它在联系人数组中的位置。我们可以使用 ANY() 函数,如下所示:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

这将返回以下内容:

在搜索中 PostgreSQL 排列

扩展数组

我们可以将数组的值拆分成行。这个过程称为数组扩展。例如,在“员工”表中,有些员工在“联系人”数组中有两个联系人。我们可以将这些联系人拆分成单独的行。 PostgreSQL 提供了可用于此目的的 unnest() 函数。例如:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

这将返回以下内容:

扩展数组

员工 Alice John 和 James Bush 各有两个联系人。我们可以将它们拆分成两行。

使用 pgAdmin

创造 PostgreSQL 阵列

要通过 pgAdmin 完成相同操作,请执行以下操作:

步骤1) 登录您的 pgAdmin 帐户。

步骤2)

  1. 在左侧的导航栏中,单击数据库。
  2. 点击演示按钮。

创造 PostgreSQL 使用 pgAdmin 的数组

步骤3) 在查询编辑器中键入查询以创建员工表:

CREATE TABLE Employees (
   id int PRIMARY KEY,
   name VARCHAR (100),
   contact TEXT []
);

步骤4) 单击执行按钮。

创造 PostgreSQL 使用 pgAdmin 的数组

插入 PostgreSQL 数组值

步骤1) 在查询编辑器中键入以下查询:

INSERT INTO Employees
VALUES
   (
      1,
      'Alice John',
      ARRAY [ '(408)-743-9045',
      '(408)-567-7834' ]
   );

步骤2) 单击执行按钮:

插入 PostgreSQL 数组值

步骤3) 要在查询中使用花括号,请在查询编辑器中键入以下查询:

INSERT INTO Employees
VALUES
   (
    2,
      'Kate Joel',
      '{"(408)-783-5731"}'
   ),
   (
      3,
      'James Bush',
      '{"(408)-745-8965","(408)-567-78234"}'
   );

然后点击“执行”按钮:

插入 PostgreSQL 数组值

查询数组数据

步骤1) 要查看 Employees 表的内容,请在查询编辑器中键入以下查询:

SELECT * FROM Employees;

步骤2) 单击执行按钮:

使用 pgAdmin 查询数组数据

它应该返回以下内容:

使用 pgAdmin 查询数组数据

步骤3) 要查看员工的首次联系记录,请在查询编辑器中输入以下查询语句,然后单击“执行”按钮:

SELECT name, contact[1]
FROM Employees;

使用 pgAdmin 查询数组数据

它应该返回以下内容:

使用 pgAdmin 查询数组数据

步骤4) 要将 SELECT 语句与 WHERE 子句结合使用,请在查询编辑器中键入以下命令,然后单击“执行”按钮:

SELECT
   name
FROM
   Employees
WHERE
   contact [ 2 ] = '(408)-567-78234';

使用 pgAdmin 查询数组数据

它应该返回以下内容:

使用 pgAdmin 查询数组数据

修改 PostgreSQL 排列

步骤1) 要更新 ID 为 3 的用户的第二个联系人,请运行以下命令:

UPDATE Employees
SET contact [ 2 ] = '(408)-589-89347'
WHERE
   id = 3;

步骤2) 单击执行按钮。

修改 PostgreSQL 使用 pgAdmin 进行数组

步骤3) 在查询编辑器中输入以下命令以检查更改是否成功,然后单击“执行”按钮:

SELECT * FROM Employees;

修改 PostgreSQL 使用 pgAdmin 进行数组

它应该返回以下内容:

修改 PostgreSQL 使用 pgAdmin 进行数组

在搜索中 PostgreSQL 排列

步骤1) 在查询编辑器中键入以下查询:

SELECT
   name,
   contact
FROM
   Employees
WHERE
   '(408)-783-5731' = ANY (contact);

步骤2) 单击执行按钮。

在搜索中 PostgreSQL 使用 pgAdmin 进行数组

它应该返回以下内容:

在搜索中 PostgreSQL 使用 pgAdmin 进行数组

扩展数组

步骤1) 在查询编辑器中键入以下查询:

SELECT
   name,
   unnest(contact)
FROM
   Employees;

步骤2) 单击执行按钮。

使用 pgAdmin 扩展数组

它应该返回以下内容:

使用 pgAdmin 扩展数组

下载本教程使用的数据库

常见问题

是的。AI 助手可以编写包含数组列的 CREATE TABLE 语句、使用 ARRAY 或花括号的 INSERT 命令,以及像 unnest() 或 ANY() 这样的函数。运行生成的 SQL 语句之前,请务必在您的数据库模式上进行测试。

是的。AI 工具可以建议数组列还是规范化的子表更适合你的数据。数组适合小型、固定列表,而单独的表适合大型或频繁查询的关系。请使用你的查询模式进行验证。

使用 array_length(array, dimension) 函数。例如,array_length(contact, 1) 返回 contact 数组第一维的元素个数。

是的。可以使用 array_append(array, value) 函数或连接运算符 ||。例如,UPDATE Employees SET contact = array_append(contact, '(408)-000-0000') 会添加一个新元素。

总结一下这篇文章: