ALTER SEQUENCE — 更改序列生成器的定义
ALTER SEQUENCE [ IF EXISTS ]name
[ ASdata_type
] [ INCREMENT [ BY ]increment
] [ MINVALUEminvalue
| NO MINVALUE ] [ MAXVALUEmaxvalue
| NO MAXVALUE ] [ START [ WITH ]start
] [ RESTART [ [ WITH ]restart
] ] [ CACHEcache
] [ [ NO ] CYCLE ] [ OWNED BY {table_name
.column_name
| NONE } ] ALTER SEQUENCE [ IF EXISTS ]name
SET { LOGGED | UNLOGGED } ALTER SEQUENCE [ IF EXISTS ]name
OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ]name
RENAME TOnew_name
ALTER SEQUENCE [ IF EXISTS ]name
SET SCHEMAnew_schema
ALTER SEQUENCE
更改现有序列生成器的参数。任何未在 ALTER SEQUENCE
命令中明确设置的参数都将保留其先前的设置。
您必须拥有该序列才能使用 ALTER SEQUENCE
。要更改序列的模式,您还必须在新的模式上拥有 CREATE
权限。要更改所有者,您必须能够 SET ROLE
为新的所有者角色,并且该角色必须在该序列的模式上拥有 CREATE
权限。(这些限制强制执行更改所有者不会做任何您无法通过删除并重新创建序列来做的事情。但是,超级用户无论如何都可以更改任何序列的所有权。)
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
]setval
函数并使用 is_called
= false
:指定的值将由下一个 nextval
调用返回。编写没有 restart
值的 RESTART
等效于提供由 CREATE SEQUENCE
记录或上次由 ALTER SEQUENCE START WITH
设置的起始值。
与 setval
调用相反,序列上的 RESTART
操作是事务性的,并且阻止并发事务从同一序列获取数字。如果这不是所需的操作模式,则应使用 setval
。
cache
子句 CACHE
使序列号能够被预先分配并存储在内存中以便更快地访问。最小值为 1(一次只能生成一个值,即没有缓存)。如果未指定,则将保持旧的缓存值。cache
CYCLE
可选的 CYCLE
关键字可用于使序列在分别达到递增或递减序列的 maxvalue
或 minvalue
时回绕。如果达到限制,则生成的下一个数字将分别是 minvalue
或 maxvalue
。
NO CYCLE
如果指定了可选的 NO CYCLE
关键字,则序列达到其最大值后对 nextval
的任何调用都将返回错误。如果未指定 CYCLE
或 NO CYCLE
,则将保持旧的循环行为。
SET { LOGGED | UNLOGGED }
此形式将序列从未记录更改为已记录,反之亦然(请参阅 CREATE SEQUENCE)。它不能应用于临时序列。
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 SEQUENCE
阻止并发的 nextval
、currval
、lastval
和 setval
调用。
由于历史原因,ALTER TABLE
也可以与序列一起使用;但是,ALTER TABLE
中允许与序列一起使用的唯一变体等效于上面显示的形式。
将名为 serial
的序列从 105 重新启动
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE
符合SQL标准,但 AS
、 START WITH
、 OWNED BY
、 OWNER TO
、 RENAME TO
和 SET SCHEMA
子句除外,这些是 PostgreSQL 的扩展。
如果您发现文档中有任何不正确、与您使用特定功能的体验不符或需要进一步澄清的地方,请使用此表单来报告文档问题。