ALTER SEQUENCE

Name

ALTER SEQUENCE --  修改一个序列生成器的定义

Synopsis

ALTER SEQUENCE 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.column | NONE } ]
ALTER SEQUENCE name OWNER TO new_owner
ALTER SEQUENCE name RENAME TO new_name
ALTER SEQUENCE name SET SCHEMA new_schema

描述

ALTER SEQUENCE命令修改一个现有的序列发生器的参数。 任何没有明确在ALTER SEQUENCE命令里声明的参数都将保留原先的设置。

要使用ALTER SEQUENCE,你必须拥有该序列。要改变一个序列的模式, 你必须在新模式上有CREATE权限。要改变属主,您必须也是新的所有 角色的直接或者间接的成员,并且那个角色必须有序列模式上的CREATE 权限。(这些约束强制在改变属主时只能做删除或者创建序列时能做的操作。然而, 一个超级用户可以以任何方式改变任意序列的成员关系。)

参数

name

一个要修改的序列的名字(可以有模式修饰)

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 函数 : 指定的值将会通过 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.column
OWNED BY NONE

OWNED BY选项将序列和一个表的特定字段关联, 这样,如果那个字段(或整个表)被删除了,那么序列也将被自动删除。 指定的新关联将覆盖旧有的关联。指定的表必须与序列的属主相同并且在同一个模式中。 指定OWNED BY NONE将删除任何已经存在的关联,也就是让该序列变成"独立"序列。

new_owner

序列新所有者的用户名。

new_name

序列的新名称。

new_schema

序列的新模式

Notes

为避免从同意序列获取数字的并发事务阻塞,在序列产生参数上的 ALTER SEQUENCE影响从不回滚;这些改变会迅速起效并且是 不可逆的;然而,OWNED BY,OWNER TO, RENAME TO, 和SET SCHEMA子句会引起可被回滚的普通目录更新。

ALTER SEQUENCE不会迅速影响后台的nextval结果, 除了当前的预先分配(缓存的)序列值。他们将在意识到变化的序列产生参数之前, 用完所有缓存值。当前后台将会迅速受到影响。

ALTER SEQUENCE不影响序列的currval状态。 (在PostgreSQL8.3之前,有时会影响。)

由于历史原因,ALTER TABLE也可用于序列;但是仅仅允许序列的 ALTER TABLE变量等价于以上所示的形式。

示例

从105重新开始一个叫serial的序列:

ALTER SEQUENCE serial RESTART WITH 105;

兼容性

ALTER SEQUENCE遵循SQL标准,但是START WITHOWNED BYOWNER TORENAME TOSET SCHEMAPostgreSQL扩展。

又见

CREATE SEQUENCE, DROP SEQUENCE