ALTER SEQUENCE [ IF EXISTS ] name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ] [ START [ WITH ] start ] [ RESTART [ [ WITH ] restart ] ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table_name.column_name | NONE } ] ALTER SEQUENCE [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_name ALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema
ALTER SEQUENCE更改一个现有序列发生器的参数。 任何没有在ALTER SEQUENCE命令中明确设置的参数保持它们之前的设置。
要使用ALTER SEQUENCE,你必须拥有该序列。要更改一个序列的模式, 你还必须拥有新模式上的CREATE特权。要更改拥有者, 你还必须是新拥有角色的一个直接或者间接成员,并且该角色必须具有该序列的模式上的 CREATE特权 (这些约束强制在改变所有者时不能通过删除或者重建序列做一些不能做的操作。 不过,一个超级用户怎么都能更改任何序列的所有权。)。
要修改的序列的名称(可以是模式限定的)。
在序列不存在时不要抛出一个错误。这种情况下会发出一个提示。
子句INCREMENT BY increment是可选的。 一个正值将产生一个上升序列,一个负值会产生一个下降序列。 如果没有指定,旧的增量值将被保持。
可选的子句MINVALUE minvalue 决定一个序列能产生的最小值。如果指定了NO MINVALUE, 上升序列和下降序列的默认值分别是 1 和- 263-1。 如果这些选项都没有被指定,将保持当前的最小值。
可选的子句MAXVALUE maxvalue决定一个序列能产生的最大值。 如果指定了NO MAXVALUE,上升序列和下降序列的默认值分别是 263-1 和 -1。如果这些选项都没有被指定,将保持当前的最大值。
可选的子句START WITH start更改该序列被记录的开始值。 这对于当前序列值没有影响,它会简单地设置 未来ALTER SEQUENCE RESTART命令将会使用的值。
可选的子句RESTART [ WITH restart ]更改该序列的
当前值。这等效于用is_called = false
调用setval
函数:被指定的值将会被
下一次nextval
调用返回。写上没有
restart值的
RESTART等效于提供被
CREATE SEQUENCE记录的或者上一次被
ALTER SEQUENCE START WITH设置的开始值。
子句CACHE cache使得序列数字被预先 分配并且保存在内存中以便更快的访问。最小值是 1(每次只产生一个值,即 无缓存)。如果没有指定,旧的缓冲值将被保持。
可选的CYCLE关键词可以被用来允许该序列在达到 maxvalue(上升序列)或 minvalue(下降序列)时 回卷。如果到达该限制,下一个被产生的数字将分别是 minvalue或者 maxvalue。
如果指定了可选的NO CYCLE关键词,任何在该
序列到达其最大值后的nextval
调用将会返回
一个错误。如果既没有指定CYCLE也没有指定
NO CYCLE,旧的循环行为将被保持。
OWNED BY选项导致该序列与一个特定的表列相关联, 这样如果该列(或者整个表)被删除,该序列也会被自动删除。如果指定, 这种关联会替代之前为该序列指定的任何关联。被指定的表必须具有相同的 拥有者并且与该序列在同一个模式中。指定 OWNED BY NONE可以移除任何现有的关联,让该序列 "自立"。
该序列的新拥有者的用户名。
该序列的新名称。
该序列的新模式。
为了避免从同一个序列获得数字的并发事务阻塞, ALTER SEQUENCE在该序列生成参数上的效果永远不会 被回滚,那些更改立刻生效并且无法逆转。不过,OWNED BY、 OWNER TO、RENAME TO和SET SCHEMA 子句会导致普通目录被更新并且无法被回滚。
ALTER SEQUENCE将不会立即影响除当前后端外
其他后端中的nextval
结果,因为它们有预分配(缓存)的序列
值。在注意到序列生成参数被更改之前它们将用尽所有缓存的值。当前后端将被
立刻影响。
ALTER SEQUENCE不会影响该序列的
currval
状态(在
PostgreSQL 8.3 之前有时会影响)。
由于历史原因,ALTER TABLE也可以被用于序列, 但是只有等效于上述形式的ALTER TABLE变体才被 允许用于序列。