本文带你学习PostgreSQL Array 类型,包括如何操作数组类型以及一些常用函数。

Array类型

数组类型是 Postgresql 的重要角色之一。每种数据都有其伴随的数组类型,如integer 对应 integer[] ,character 对应 character[] 。针对自定义数据类型,PostgreSQL在后台也创建了对应的伴随数组类型。

PostgreSQL 支持任何有效的数据类型列为数组类型,包括内置类型、用户定义类型、枚举类型。下面示例,定义contacts 表,phone 列定义为数组类型:

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

phone 列是一维数组,可以包括多个电话号码。

操作数组值

插入数组值

下面语句插入一条记录:

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 语句查询数组:

SELECT
	name,
	phones
FROM
	contacts;

输出:

namephones
John Doe{(408)-589-5846,(408)-589-5555}
Lily Bush{(408)-589-5841}
William Gate{(408)-589-5842,(408)-589-58423}

也可以通过[] 加上下标方式访问数组元素。PostgreSQL 访问数组元素是从1 开始。因此获取第一个电话使用 phone[1]:

SELECT
	name,
	phones [ 1 ]
FROM
	contacts;

输出:

namephones
John Doe(408)-589-5846
Lily Bush(408)-589-5841
William Gate(408)-589-5842

也可以在where 条件总使用数据元素过滤记录。请看示例:

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

输出:

namephones
William Gate(408)-589-58423

修改数组数据

我们也可以修改数组每个元素或整个数组。下面示例更新数组元素:

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

更新整个数组值:

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

检索数组

假设我们需要检查phones字段包括特定号码,并不关心是第几个元素,可以使用any() 函数:

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

展开数组

unnest()函数可以扩展数组为多行,请看示例:

SELECT
	name,
	unnest(phones)
FROM
	contacts;

输出:

nameunnest
John Doe(408)-589-5846
John Doe(408)-589-5555
Lily Bush(408)-589-5841
William Gate(408)-589-5842
William Gate(408)-589-58423

总结

本文学习 PostgreSQL 数组类型,并通过示例介绍一些数组常用操作及函数。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐