ALTER SEQUENCE

ALTER SEQUENCE

更改一个序列发生器的定义。

概要

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 RENAME TO new_name

ALTER SEQUENCE name SET SCHEMA new_schema

描述

ALTER SEQUENCE 更改一个现有序列发生器的参数。任何没有被明确设置的参数在ALTER SEQUENCE 命中,都要维持他们之前的设置

用户必须拥有该序列才能使用ALTER SEQUENCE. 要更改一个序列 的模式,用户还必须拥有新模式上的CREATE 特权。 注意超级用户自动拥有所有的特权。

参数

name
要修改的序列的名称(可选方案限定)。
increment
子句 INCREMENT BY increment 是可选的。一个正值将产生一个上升序列,一个负值会产生一个下降序列。如果未被指定,则旧的增量值将被保持。
minvalue
NO MINVALUE
可选的子句 MINVALUE minvalue 决定一个序列 能产生的最小值。 如果 NO MINVALUE 被指定, 如果指定了NO MINVALUE,上升序列和下降序列的默认值分别是 1 和 -263-1。如果这些选项都没有被指定,将保持当前的 最小值。
maxvalue
NO MAXVALUE
可选子句 MAXVALUE maxvalue 决定一个序列 能产生的最大值。 如果NO MAXVALUE 被指定, 上升序列和下降序列的默认值分别是 263-1 和 -1。如果这些选项都没有被指定,将保持当前的 最大值。
start
可选子句RESTART WITH 更改该序列被记录的开始值。
cache
子句 CACHE cache 使得序列数字被预先 分配并且保存在内存中以便更快的访问。最小值是 1(每次只产生一个值,即 无缓存)。如果没有指定,旧的缓冲值将被保持。
CYCLE
当一个上升或者下降序列已经达到maxvalue或者minvalue时,可选的CYCLE关键词可以被用来允许该序列绕回。如果达到限制,下一个被生成的数字将分别是minvalue或者maxvalue
NO CYCLE
如果可选的NO CYCLE关键字被指定,在该序列达到其最大值后对nextval的任何调用将会返回错误。如果 CYCLENO CYCLE都没有被指定, 将维持旧的循环行为。
OWNED BY table.column
OWNED BY NONE
The OWNED BY 选项导致该序列与一个特定的表列相关联,这样如果该列(或者整个表)被删除,该序列也会被自动删除。 如果指定了关联, 这种关联会替代之前为该序列指定的任何关联。被指定的表必须具有相同的 拥有者并且与该序列在同一个模式中。 OWNED BY NONE 可以移除任何现有的关联。
new_name
该序列的新名称。
new_schema
该序列的新模式。

注解

为了避免从同一个序列获得数字的并发事务阻塞, ALTER SEQUENCE'在该序列生成参数上的效果永远不会被回滚,那些更改立刻生效并且无法逆转。不过, OWNED BYRENAME TO以及SET SCHEMA 子句会导致普通目录被更新并且无法被回滚。

ALTER SEQUENCE 不会立即影响nextval 影响除当前后端外 其他后端中的nextval结果,因为它们有预分配(缓存)的序列 值。在注意到序列生成参数被更改之前它们将用尽所有缓存的值。当前会话将被立刻影响。

一些ALTER TABLE 的变体可以很好的用于序列。 例如, 重命名一个序列利用 ALTER TABLE RENAME.

示例

重启一个被称为 serial的序列在 105:

ALTER SEQUENCE serial RESTART WITH 105;

兼容性

ALTER SEQUENCE符合SQL标准,OWNED BYRENAME TOSET SCHEMA子句除外,它们是Greenplum数据库的扩展。