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 函数 :指定的值将会通过nextvalnext调用返回。 不使用_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 BYOWNER TORENAME TOSET 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 WITHOWNED BYOWNER TORENAME TOSET SCHEMA选项是 PostgreSQL的扩展。

参见

CREATE SEQUENCE, DROP SEQUENCE