本文介绍学习PostgreSQL Array类型及操作数组函数。
1. Array类型
Array在PostgreSql中扮演着重要角色。每个数据类型都有其伴随数组类型,如integer 有 integer[] 数组类型, character 对应 character[] 等。对于自定义数据类型,Postgresql同样会在自动创建对于数组类型。
PostgreSQL 可以定义列未数组类型,支持任何有效的内置数据类型、用户自定义类型或枚举类型数组。举例,下面创建contacts表,phones是数组类型:
CREATE TABLE contacts (
id serial PRIMARY KEY,
name VARCHAR (100),
phones TEXT []
);
phones是一维数组,即联系人可能有多个联系方式。
2. 维护数组类型数据
2.1 插入数组值
下面语句插入一条记录至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"}');
上面插入两条记录至contacts表,注意使用花括号,需要使用单引号包裹数组内容,使用双引号包裹数组元素。
2.2 修改数组值
PostgreSQL 支持更新数组元素或整个数组。下面更新第二个元素:
UPDATE contacts
SET phones [2] = '(408)-589-5843'
WHERE ID = 3;
我们查询进行检验:
SELECT
id,
name,
phones [ 2 ]
FROM
contacts
WHERE
id = 3;
更新整个数组值:
UPDATE contacts
SET phones = '{"(408)-589-5843"}'
WHERE id = 3;
2.3 查询数组数据
可以直接查询数组数据:
SELECT
name,
phones
FROM
contacts;
我们可以通过中括号和下标值访问数组元素,默认从1开始。下面示例查询名称及第一个电话号码:
SELECT
name,
phones [ 1 ]
FROM
contacts;
也可以在where子句中条件查询数组元素。下面示例查询第二个电话号码为(408)-589-58423
的记录:
SELECT
name
FROM
contacts
WHERE
phones [ 2 ] = '(408)-589-58423';
2.4 搜索数组元素
假设你要搜索’(408)-589-5555’电话号码,无论它在数组中的位置,可以使用any函数:
SELECT
name,
phones
FROM
contacts
WHERE
'(408)-589-5555' = ANY (phones);
2.5 展开数组
可以通过unnest函数展开数组元素为多行记录。下面示例展示phones数组为多行记录:
SELECT
name,
unnest(phones)
FROM
contacts;
3. 总结
本文学习了如何使用PostgreSQL 数组类型,包括操作数组数据及相关函数。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/112105166