PostgreSQL数据类型--数组类型

 2015年03月26日    1165     声明


PostgreSQL 允许将字段定义成定长或不定长的多维数组。 数组类型可以是任何基本类型或用户定义类型(复合类型和域的数组还不支持)。


1.数据类型定义

数组类型定义是通过在数组元素类型名后面国方括号:[]来命名的。PostgreSQL目前的实现并不强制限制数组长度,即:声明长度和未声明长度的数组相同。也不强制数组维数,特定元素类型的数组都被认为是相同的类型,不管他们的大小或者维数。创建数组类型字段示例如下:

CREATE TABLE array_tmp(
    name                 text,
    pay_by_quarter  integer[],
    schedule            text[][],
    squares             integer[3][3]        --指定长度后仍然不会限制长度
);


2.数组类型数据插入

数组类型数据插入用大括号把值括起来并且用逗号将它们分开。可以在任意数组值周围添加双引号,如果值包含逗号或者花括弧,必须加上双引号输入。数据类型数据插入,还可以使用ARRAY构造器。示例如下:

INSERT INTO array_tmp VALUES(
'itbilu', 
 '{1,2,3,4}', 
'{{"include {"},{"2value"}}', 
'{{111,122},{211, 222}}');

INSERT INTO array_tmp VALUES (
'liuht', 
ARRAY[1,2,3,4], 
ARRAY[['value 11', 'value 12'], ['value 21', 'value 22']], 
ARRAY[[111,122],[211, 222]]);   --使用ARRAY构造器

查询结果如下:

  name  | pay_by_quarter |                     schedule                      |        squares        
--------+----------------+---------------------------------------------------+-----------------------
 itbilu | {1,2,3,4}      | {{"include {"},{2value}}                          | {{111,122},{211,222}}
 liuht  | {1,2,3,4}      | {{"value 11","value 12"},{"value 21","value 22"}} | {{111,122},{211,222}}


3.数组类型数据的查询

和其他语言一样,PostgreSQL中数组也是通过下标数字的方式进行访问,只是PostgreSQL中数组元素的下标是从1开始n结束,格式如:[n]。对于一维或更多维数组,查询一个数组的部分数据查询格式为:[脚标界上:脚标下界]。

数组下标定位查询及返回结果:

liuht=# SELECT name, schedule  FROM array_tmp WHERE schedule[1][1]='value 11';
  name  |                     schedule                      
--------+---------------------------------------------------
 itbilu | {{"value 11","value 12"},{"value 21","value 22"}}
(1 row)

查询多维数据的部分数据,如查询单维字段pay_by_quarter的第2,3列数据,及多维列schedule的第1维的1列数据和第2维第一列数据。SQL语句及查询结果如下:

liuht=# SELECT pay_by_quarter[2:3],schedule[1:2][1:1] FROM array_tmp;
 pay_by_quarter |          schedule           
----------------+-----------------------------
 {2,3}          | {{"include {"},{2value}}
 {2,3}          | {{"value 11"},{"value 21"}}
(2 rows)