ALTER SEQUENCE
Name
ALTER SEQUENCE -- 更改一个序列生成器的定义
Synopsis
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_
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和-2<sup class="calibre28">63</sup>-1。 如果没有声明则沿用当前的最小值。
_maxvalue_
NO MAXVALUE
MAXVALUE
_maxvalue_
是一个可选选项,它决定一个序列可以生成的最大的值。 如果声明了NO MAXVALUE
那么将使用缺省值,对于递增和递减的序列分别是2<sup class="calibre28">63</sup>-1和-1。 如果没有声明则沿用当前的最大值。
_start_
START WITH
_start_
是一个可选选项,它修改序列的起始值。 这对序列当前值没有影响;它仅设置将来的ALTER SEQUENCE RESTART
命令将会使用的值。
_restart_
RESTART [ WITH
_restart_
]是一个可选选项,它改变序列的当前值。 这相当于用is_called
= false
参数调用setval
函数 :指定的值将会通过nextval
的next调用返回。 不使用_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
仅有的与序列有关的变化等价于前面所示的形式。
例子
将序列serial设置为从105重新开始取值:
ALTER SEQUENCE serial RESTART WITH 105;
兼容性
ALTER SEQUENCE
遵从SQL标准,但START WITH
、 OWNED BY
、OWNER TO
、RENAME TO
和SET SCHEMA
选项是 PostgreSQL的扩展。