提要:在本教程中,我们将向您展示如何使用PostgreSQL数组,并向您介绍用于数组操作的一些方便的函数。

数组在 PostgreSQL 中起着重要的作用。每种数据类型都有其对应的数组类型,比如,INTEGERINTEGER[] 数组类型,CHARCHAR[] 数组类型等。如果你定义了你自己的数据类型,PostgreSQL 会在后台为你创建一个对应的数组类型。

PostgreSQL 允许你定义一个字段为任何有效数据类型的数组,包括内置类型,用户定义类型或枚举类型。下例中, phones 字段的数据类型是一个数组:

CREATE TABLE contacts (
 id serial PRIMARY KEY,
 name VARCHAR (100),
 phones TEXT []
);

插入数组值

下面,给 contacts 表插入数据:

INSERT INTO contacts (name, phones)
VALUES
 (
 'John Doe',
 ARRAY [ '(408)-589-5846',
 '(408)-589-5555' ]
 );

这里使用了 ARRAY 构造器来将一个数组插入到表中,还可以使用大括号的语法:

INSERT INTO contacts (name, phones)
VALUES
 (
 'Lily Bush',
 '{"(408)-589-5841"}'
 ),
 (
 'William Gate',
 '{"(408)-589-5842","(408)-589-58423"}'
 );

查询数组数据

SELECT
 name,
 phones
FROM
 contacts;

array

要查询数组中元素,使用 []。默认,PostgreSQL 使用 1 作为数组的起始下标。假如,我们想获取 contacts 表中,phones 的第一个元素:

SELECT
 name,
 phones [ 1 ]
FROM
 contacts;

array

可以使用数组元素来作为 WHERE 语句的过滤条件:

SELECT
 name
FROM
 contacts
WHERE
 phones [ 2 ] = '(408)-589-58423';

修改数组数据

可以修改数组元素,也可以修改整个数组。首先,来看修改数组元素的例子:

UPDATE contacts
SET phones [ 2 ] = '(408)-589-5843'
WHERE
 ID = 3;

再看修改整个数组的例子:

UPDATE contacts
SET phones = '{"(408)-589-5843"}'
WHERE
 ID = 3;

在数组中搜索

假设,要找到谁的电话里含有 (408)-589-5555 这个号码,可以像下例这样使用 ANY() 函数:

SELECT
 name,
 phones
FROM
 contacts
WHERE
 '(408)-589-5555' = ANY (phones);

array

展开数组

PostgreSQL 提供了用于将数组展开成行列表的 UNNEST() 函数:

SELECT
 name,
 unnest(phones)
FROM
 contacts;

array

上一篇:PostgreSQL UUID类型