创建与管理序列
序列常用于在新增记录时自动生成唯一标识符,序列的管理包括创建序列、使用序列、修改序列以及删除序列。
(1)创建序列
gpadmin=# \h CREATE SEQUENCE 查看创建序列的帮助
创建名为myserial 的序列
CREATE SEQUENCE myserial START 101;
gpadmin=# \ds 通过\ds命令查看当前数据库中存在的序列
(2)使用序列
1、 可以使用nextval函数对序列进行操作。例如:获取序列的下一个值并插入表中:
INSERT INTO vendors VALUES (nextval('myserial'), 'acme');
2、重置一个序列计数器的值,函数nextval是不回滚的,一旦使用nextval中生成这个序列时下次使用时不能使用这个值,不管该序列创建是否成功还是失败;
注意:如果启用了镜像功能,nextval不允许在UPDATE和DELETE语句中被使用,另外currval和lastval函数目前未被GPDB支持。
3、检查序列当前的计数设置:SELECT * FROM SEQ_NAME,例如:
SELECT * FROM myserial;
4、可以使用setval函数重置一个序列计数器的值。例如:
SELECT setval('myserial', 201);
(3)修改序列
gpadmin=# \h alter sequence 查看修改序列的帮助
修改当前序列的开始值为105
ALTER SEQUENCE myserial RESTART WITH 105;
删除序列
gpadmin=# \h drop sequence 查看修改序列的帮助
devdw=# drop sequence myseq; 删除当前序列
DROP SEQUENCE
devdw=# \ds 再次查看当前序列时提示无序列
No relations found.
序列函数
序列函数
函数 返回类型 描述
currval(regclass) bigint 返回最近一次用 nextval 获取的指定序列的数值 nextval(regclass) bigint 递增序列并返回新值
setval(regclass, bigint) bigint 设置序列的当前数值
setval(regclass, bigint, boolean) bigint 设置序列的当前数值以及 is_called 标志
范例:
CREATE SEQUENCE seq_test INCREMENT BY 1 MINVALUE 1 MAXVALUE 1000 START WITH 1 NO CYCLE;
INCREMENT BY : 每次序列增加(或减少)的步长
MINVALUE : 序列最小值,NO MINVALUE表示没有最小值
MAXVALUE : 序列最大值,NO MAXVALUE表示没有最大值
START WITH :以什么序列值开始
CYCLE : 序列是否循环使用
OWNED BY : 可以直接指定一个表的字段,也可以不指定。
建表:
CREATE TABLE test (
id int not NULL default nextval('seq_test'),
shipment_no bigint
)
;
insert into test (shipment_no) values ('12355756');
insert into test (shipment_no) values ('422342345');
insert into test (shipment_no) values ('5235235235');
insert into test (shipment_no) values ('23426526');
insert into test (shipment_no) values ('26462346526');