创建与管理序列
序列常用于在新增记录时自动生成唯一标识符,序列的管理包括创建序列、使用序列、修改序列以及删除序列。
创建序列
使用CREATESEQUENCE命令来创建并初始化一个给定名称的单列序列表;
devdw=# \h CREATE SEQUENCE 查看创建序列的帮助 Command: CREATE SEQUENCE Description: define a new sequence generator Syntax: CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table.column | NONE } ]
devdw=# \ds 通过\ds命令查看当前数据库中存在的序列 No relations found. devdw=# create sequence myseq start with 100; 创建名为myseq的序列 CREATE SEQUENCE devdw=# \ds 通过\ds命令查看当前数据库中存在的序列 List of relations Schema | Name | Type | Owner | Storage -------+-------+----------+---------+--------- public | myseq | sequence | gpadmin | heap (1 row) |
使用序列
1) 可以使用nextval函数对序列进行操作。例如:获取序列的下一个值并插入表中:
2) 重置一个序列计数器的值,函数nextval是不回滚的,一旦使用nextval中生成这个序列时下次使用时不能使用这个值,不管该序列创建是否成功还是失败;
注意:如果启用了镜像功能,nextval不允许在UPDATE和DELETE语句中被使用。
3) 检查序列当前的计数设置:SELECT * FROM SEQ_NAME;
devdw=# select setval('myseq',200); 通过设置myseq的序列值为20 setval ------------- 200 (1 row) devdw=# select nextval('myseq'); 查看当前序列的下一个值 nextval --------- 201 (1 row) devdw=# select * from myseq; 查看当前序列的信息 sequence_name | last_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called ---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+----------- myseq | 200 | 1 | 9223372036854775807 | 1 | 1 | 0 | f | t |
修改序列
使用ALTERSEQUENCE命令修改已有的序列表。
devdw=# \h alter sequence 查看修改序列的帮助 Command: ALTER SEQUENCE Description: change the definition of a sequence generator Syntax: ALTER SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ RESTART [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table.column | NONE } ] ALTER SEQUENCE name SET SCHEMA new_schema
devdw=# alter sequence myseq start with 205; 修改当前序列的开始值为205 ALTER SEQUENCE |
删除序列
使用DROPSEQUENCE命令删除已有的序列表。
devdw=# \ |