支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4

ALTER SEQUENCE

ALTER SEQUENCE — 更改序列生成器的定义

概要

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 SET { LOGGED | UNLOGGED }
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | 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 权限。要更改所有者,您必须能够 SET ROLE 为新的所有者角色,并且该角色必须在该序列的模式上拥有 CREATE 权限。(这些限制强制执行更改所有者不会做任何您无法通过删除并重新创建序列来做的事情。但是,超级用户无论如何都可以更改任何序列的所有权。)

参数

name

要更改的序列的名称(可选地,带有模式限定符)。

IF EXISTS

如果序列不存在,则不抛出错误。在这种情况下会发出通知。

data_type

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

如果且仅当先前最小值和最大值是旧数据类型的最小值或最大值(换句话说,如果该序列是使用 NO MINVALUENO 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 cache 使序列号能够被预先分配并存储在内存中以便更快地访问。最小值为 1(一次只能生成一个值,即没有缓存)。如果未指定,则将保持旧的缓存值。

CYCLE

可选的 CYCLE 关键字可用于使序列在分别达到递增或递减序列的 maxvalueminvalue 时回绕。如果达到限制,则生成的下一个数字将分别是 minvaluemaxvalue

NO CYCLE

如果指定了可选的 NO CYCLE 关键字,则序列达到其最大值后对 nextval 的任何调用都将返回错误。如果未指定 CYCLENO 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 阻止并发的 nextvalcurrvallastvalsetval 调用。

由于历史原因,ALTER TABLE 也可以与序列一起使用;但是,ALTER TABLE 中允许与序列一起使用的唯一变体等效于上面显示的形式。

示例

将名为 serial 的序列从 105 重新启动

ALTER SEQUENCE serial RESTART WITH 105;

兼容性

ALTER SEQUENCE 符合SQL标准,但 ASSTART WITHOWNED BYOWNER TORENAME TOSET SCHEMA 子句除外,这些是 PostgreSQL 的扩展。

提交更正

如果您发现文档中有任何不正确、与您使用特定功能的体验不符或需要进一步澄清的地方,请使用此表单来报告文档问题。