pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
这里必须变成一个关于数组行为的章节。有人志愿吗?- thomas 1998-01-12
Postgres允许把实例的属性定义为定长或变长的 多维数组。可以创建任何基本类型或用户定义类型的数组。 为了说明它们的用途,我们先创建一个带有基本类型数组的类。
CREATE TABLE SAL_EMP (
name text,
pay_by_quarter int4[],
schedule text[][]
);
上面的查询将创建一个名为 SAL_EMP 的类,其中有一个 text 字符串(name)、一个 int4 的一维数组(pay_by_quarter,表示员工的季度薪水)以及一个 text 的二维数组(schedule,表示员工的周计划)。 现在我们做一些 INSERTS;注意,向数组追加时, 我们把值用花括号括起来并用逗号分隔。如果你了解 C, 这很像初始化结构的语法。
INSERT INTO SAL_EMP
VALUES ('Bill',
'{10000, 10000, 10000, 10000}',
'{{"meeting", "lunch"}, {}}');
INSERT INTO SAL_EMP
VALUES ('Carol',
'{20000, 25000, 25000, 25000}',
'{{"talk", "consult"}, {"meeting"}}');
默认情况下,Postgres 对数组使用 "one-based"(从 1 开始)的 编号约定——也就是说,一个有 n 个元素的数组从 array[1] 开始,以 array[n] 结束。 现在,我们可以在 SAL_EMP 上运行一些查询。首先,我们 展示如何一次访问数组的一个元素。下面的查询检索 第二季度薪水发生变化的员工的姓名:
SELECT name
FROM SAL_EMP
WHERE SAL_EMP.pay_by_quarter[1] <>
SAL_EMP.pay_by_quarter[2];
+------+
|name |
+------+
|Carol |
+------+
这个查询检索所有员工的第三季度薪水:
SELECT SAL_EMP.pay_by_quarter[3] FROM SAL_EMP; +---------------+ |pay_by_quarter | +---------------+ |10000 | +---------------+ |25000 | +---------------+
我们也可以访问数组的任意切片或子数组。下面的查询检索 Bill 周计划前两天的第一项。
SELECT SAL_EMP.schedule[1:2][1:1]
FROM SAL_EMP
WHERE SAL_EMP.name = 'Bill';
+-------------------+
|schedule |
+-------------------+
|{{"meeting"},{""}} |
+-------------------+
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。