GBase 8c允许定义变长多维数组,例如:
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
CREATE TABLE
数组数据类型通过在数据类型后面加上方括号([])来命名。
上述例子中创建一个名为sal_emp的表,它的列分别为:
- 类型为text的列name;
- 一维integer类型数据pay_by_quarter;
- 二维text类型数组schedule。
同时,CREATE TABLE的语法也允许指定数组的确切大小,例如:
CREATE TABLE tictactoe (
squares integer[3][3]
);
CREATE TABLE
但是这种指定并不限制数组的大小和长度,并不影响后续运行时的行为。
或者写成:
pay_by_quarter integer ARRAY[4],
或者:
pay_by_quarter integer ARRAY,
数组的输入,一般将元素值用花括号包围并用逗号分隔。例如:
INSERT INTO sal_emp
VALUES ('Bill',
'{10000, 10000, 10000, 10000}',
'{{"meeting", "lunch"}, {"training", "presentation"}}');
INSERT 0 1
INSERT INTO sal_emp
VALUES ('Carol',
ARRAY[20000, 25000, 25000, 25000],
ARRAY[['breakfast', 'consulting'], ['meeting', 'lunch']]);
INSERT 0 1
数组的查询操作与表查询类似。例如:
SELECT * FROM sal_emp; name | pay_by_quarter | schedule -------+---------------------------+------------------------------------------- Bill | {10000,10000,10000,10000} | {{meeting,lunch},{training,presentation}} Carol | {20000,25000,25000,25000} | {{breakfast,consulting},{meeting,lunch}} (2 rows)
对所有员工第三季度工资查询:
SELECT pay_by_quarter[3] FROM sal_emp; pay_by_quarter ---------------- 10000 25000 (2 rows)
数组的修改,可以使用UPDATE语句。例如:
UPDATE sal_emp SET pay_by_quarter = '{25000,25000,27000,27000}'
WHERE name = 'Carol';
UPDATE 1
数组的搜索:
SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter); name | pay_by_quarter | schedule ------+---------------------------+------------------------------------------- Bill | {10000,10000,10000,10000} | {{meeting,lunch},{training,presentation}} (1 row)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




