数组、复合数组使用的简单实例。
DROP TABLE sal_emp;
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][]
);
INSERT INTO sal_emp
VALUES ('Bill',
ARRAY[10000, 10000, 10000, 10000],
ARRAY[['meeting', 'lunch'], ['training', 'presentation']]);
INSERT INTO sal_emp
VALUES ('Carol',
ARRAY[20000, 25000, 25000, 25000],
ARRAY[ARRAY['breakfast', 'consulting'], ARRAY['meeting', 'lunch']]);
数组字段只能接受ARRAY类型,而数组元素为复合类型,必须由row()函数将数据拼接为record行类型,然后强制转换为数组的复合类型才能插入。
DROP TABLE sal_emps;
CREATE TABLE sal_emps (emps sal_emp[]);
INSERT INTO sal_emps
VALUES (
ARRAY[
row('Bill',ARRAY[1,2,3,4],ARRAY[['a', 'b'], ['c', 'd']])::sal_emp,
row('Caro',ARRAY[3,4,5,6],ARRAY[['e', 'g'], ['f', 'h']])::sal_emp
]
);
无论建表还是创建类型,都会创建两个对应的数据类型,例如
create table ty123(a int, b int);
create table ty123123(c ty123, d int);
会在pg_type中增加四条元组:
pg_type | ty123建表 | ty123建表 | ty123123建表 | ty123123建表 | |
---|---|---|---|---|---|
oid | 16722 | 16721 | 16725 | 16724 | |
typname | ty123 | _ty123 | ty123123 | _ty123123 | |
typnamespace | 2200 | 2200 | 2200 | 2200 | |
typowner | 10 | 10 | 10 | 10 | |
typlen | -1 | -1 | -1 | -1 | -1表示变长类型 |
typbyval | f | f | f | f | 传引用 |
typtype | c | b | c | b | c复合类型(表);b基本类型 |
typcategory | C | A | C | A | 优化器使用:如何隐式转换 |
typispreferred | f | f | f | f | |
typisdefined | t | t | t | t | 类型已经定义了 |
typdelim | , | , | , | , | 输入时的数据分隔符 |
typrelid | 16720 | 0 | 16723 | 0 | 复合类型都会关联一个pg_class的元组 |
typsubscript | - | array_subscript_handler | - | array_subscript_handler | 下标处理函数 |
typelem | 0 | 16722 | 0 | 16725 | |
typarray | 16721 | 0 | 16724 | 0 | |
typinput | record_in | array_in | record_in | array_in | |
typoutput | record_out | array_out | record_out | array_out | |
typreceive | record_recv | array_recv | record_recv | array_recv | |
typsend | record_send | array_send | record_send | array_send | |
typmodin | - | - | - | - | |
typmodout | - | - | - | - | |
typanalyze | - | array_typanalyze | - | array_typanalyze | |
typalign | d | d | d | d | |
typstorage | x | x | x | x | |
typnotnull | f | f | f | f | |
typbasetype | 0 | 0 | 0 | 0 | |
typtypmod | -1 | -1 | -1 | -1 | |
typndims | 0 | 0 | 0 | 0 | |
typcollation | 0 | 0 | 0 | 0 | |
typdefaultbin | |||||
typdefault | |||||
typacl |