Postgresql 中文操作指南

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 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

Description

ALTER SEQUENCE 更改现有序列生成器的参数。在 ALTER SEQUENCE 命令中未专门设置的任何参数将保留其先前的设置。

您必须拥有该序列才能使用 ALTER SEQUENCE 。要更改序列的架构,您还必须在新架构上具有 CREATE 权限。要更改所有者,您必须能够 SET ROLE 到新的所有角色,并且该角色必须对序列架构具有 CREATE 权限。(这些限制执行了不执行任何可以通过删除和重新创建序列来执行的操作,以更改所有者。但是,超级用户无论如何都可以更改任何序列的所有权。)

Parameters

  • 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_ 更改序列记录的起始值。这不会对 current 序列值产生影响;它只是设置今后的 ALTER SEQUENCE RESTART 命令将使用的值。

  • restart

    • 可选项 RESTART [ WITH _restart ]] 更改序列的当前值。这类似于使用 _is_called = false 调用 setval 函数:指定的值将由 nextvalnext 调用返回。不使用 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

    • 序列的新模式。

Notes

ALTER SEQUENCE 不会立即影响 nextval 在除当前后端之外的已预分配(缓存)序列值的后台中的结果。在注意到已更改的序列生成参数之前,它们将使用所有缓存的值。当前后端将立即受到影响。

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

ALTER SEQUENCE 阻止并发 nextvalcurrvallastvalsetval 调用。

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

Examples

以 105 重启一个名为 serial 的序列:

ALTER SEQUENCE serial RESTART WITH 105;

Compatibility

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