Skip to main content
 首页 » 数据库

速学PostgreSQL Array类型

2022年07月19日154davidwang456

本文介绍学习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
阅读延展