ALTER SEQUENCE
功能描述
修改序列定义。
注意事项
- 使用ALTER SEQUENCE的用户必须是该序列的所有者。
- 当前版本仅支持修改拥有者、归属列和最大值。若要修改其他参数,可以删除重建,并用Setval函数恢复当前值。
- ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。
- 修改序列的最大值后,会清空该序列在所有会话的cache。
- ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用。
语法格式
修改序列最大值或归属列
1 2 3 4 |
ALTER SEQUENCE [ IF EXISTS ] name [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE ] [ CACHE cachevalue ] [ OWNED BY { table_name.column_name | NONE } ] ; |
修改序列的拥有者
1
|
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner; |
参数说明
- name
- IF EXISTS
- MAXVALUE maxvalue | NO MAXVALUE
序列所能达到的最大值。如果声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE。
- CACHE cachevalue
指定要预先分配多少序列号并存储在内存中以便更快地访问。cachevalue最小值为 1(一次只能生成一个值,即NOCACHE)。如果未指定,则保留旧缓存值。
- OWNED BY
将序列和一个表的指定字段进行关联。这样,在删除指定字段或其所在表的时候会自动删除已关联的序列。
如果序列已经和表有关联后,使用OWNED BY参数后新的关联关系会覆盖旧的关联。
关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。
使用OWNED BY NONE将删除任何已经存在的关联。
- new_owner
序列新所有者的用户名。用户要修改序列的所有者,必须是新角色的直接或者间接成员,并且所有者角色必须有序列所在模式上的CREATE权限。
示例
将序列serial的最大值修改为200:
1
|
ALTER SEQUENCE serial MAXVALUE 200; |
创建一个表,定义默认值:
1
|
CREATE TABLE T1(C1 bigint default nextval('serial')); |
将序列serial的归属列变为T1.C1:
1
|
ALTER SEQUENCE serial OWNED BY T1.C1; |
更改序列serial的增量值和缓存值:
1
|
ALTER SEQUENCE serial CACHE 5; |