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更改序列的数据类型。有效类型为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的* 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阻止并发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 的扩展。

See Also

CREATE SEQUENCE, DROP SEQUENCE