On this page
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
Description
ALTER SEQUENCE
更改现有序列生成器的参数。 ALTER SEQUENCE
命令中未特别设置的所有参数均保留其先前的设置。
您必须拥有序列才能使用ALTER SEQUENCE
。要更改序列的架构,您还必须对新架构具有CREATE
特权。要更改所有者,您还必须是新拥有角色的直接或间接成员,并且该角色必须对序列的架构具有CREATE
特权。 (这些限制规定,更改所有者不会通过删除并重新创建序列来完成您做不到的任何事情.但是,超级用户仍然可以更改任何序列的所有权.)
Parameters
name
- 要更改的序列的名称(可选的模式限定)。
IF EXISTS
- 如果序列不存在,请不要抛出错误。在这种情况下发出通知。
data_type
- 可选子句
AS data_type
更改序列的数据类型。有效类型为smallint
,integer
和bigint
。
- 可选子句
仅当先前的最小值和最大值是旧数据类型的最小值或最大值时(换句话说,如果该序列是使用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
的* next 调用返回。写没有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
- 序列的新架构。
Notes
ALTER SEQUENCE
不会立即影响nextval
结果(当前后端除外)中具有预分配(缓存)序列值的后端。在注意到更改的序列生成参数之前,它们将用尽所有缓存的值。当前后端将立即受到影响。
ALTER SEQUENCE
不会影响序列的currval
状态。 (在 PostgreSQL 8.3 之前,有时会这样做.)
ALTER SEQUENCE
阻止并发nextval
,currval
,lastval
和setval
调用。
由于历史原因,ALTER TABLE
也可以与序列一起使用;但是序列允许的ALTER TABLE
的唯一变体与上面显示的形式等效。
Examples
在 105 重新启动一个名为serial
的序列:
ALTER SEQUENCE serial RESTART WITH 105;
Compatibility
ALTER SEQUENCE
符合 SQL 标准,但AS
,START WITH
,OWNED BY
,OWNER TO
,RENAME TO
和SET SCHEMA
子句是 PostgreSQL 的扩展。