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