ALTER SEQUENCE

ALTER SEQUENCE — 更改一个序列发生器的定义

Synopsis

ALTER SEQUENCE [ IF EXISTS ] name
    [ AS data_type ]
    [ 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

在序列不存在时不要抛出一个错误。这种情况下会发出一个提示。

data_type

可选的子句AS data_type改变序列的数据类型。有效的类型有smallintintegerbigint

当且仅当之前的最小和最大值是旧数据类型的最小或最大值时(换句话说,如果序列是隐式或者显式用NO MINVALUE或者NO MAXVALUE创建),数据类型的更改才会自动改变序列的最小和最大值。否则,最小和最大值将会被保留,除非在同一个命令中给出了新的值。如果最小和最大值不适合新数据类型,则将会产生错误。

increment

子句INCREMENT BY increment是可选的。 一个正值将产生一个上升序列,一个负值会产生一个下降序列。如果 没有指定,旧的增量值将被保持。

minvalue
NO MINVALUE

可选的子句MINVALUE minvalue决定一个序列 能产生的最小值。如果指定了NO MINVALUE,上升序列和下降序列的默认值分别是1和该数据类型的最小值。如果这些选项都没有被指定,将保持当前的 最小值。

maxvalue
NO MAXVALUE

可选的子句MAXVALUE maxvalue决定一个序列 能产生的最大值。如果指定了NO MAXVALUE,上升序列和下降序列的默认值分别是该数据类型的最大值和-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设置的开始值。

setval调用相反,序列上的RESTART操作是事务性的,并且会阻塞并发事务从同一个序列获得数字。如果这不是用户想要的操作模式,则应该使用setval

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将不会立即影响除当前后端外 其他后端中的nextval结果,因为它们有预分配(缓存)的序列 值。在注意到序列生成参数被更改之前它们将用尽所有缓存的值。当前后端将被 立刻影响。

ALTER SEQUENCE不会影响该序列的 currval状态(在 PostgreSQL 8.3 之前有时会影响)。

由于历史原因,ALTER TABLE也可以被用于序列, 但是只有等效于上述形式的ALTER TABLE变体才被 允许用于序列。

示例

在 105 重启一个被称为serial的序列:

ALTER SEQUENCE serial RESTART WITH 105;

兼容性

ALTER SEQUENCE符合SQL 标准,不过START WITHOWNED BYOWNER TORENAME TO 以及SET SCHEMA子句是 PostgreSQL扩展。

另见

CREATE SEQUENCE, DROP SEQUENCE