Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

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

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

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 ] 更改序列的当前值。这类似于使用 is_called = false 调用 setval 函数:指定的值将由 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 扩展。

请参阅

CREATE SEQUENCEDROP SEQUENCE