选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.1 已于 2016 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

ALTER SEQUENCE

ALTER SEQUENCE — change the definition of a sequence generator

大纲

ALTER SEQUENCE name [ INCREMENT [ BY ] increment ]
    [ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
    [ START [ WITH ] start ]
    [ RESTART [ [ WITH ] restart ] ]
    [ CACHE cache ] [ [ NO ] CYCLE ]
    [ OWNED BY { table.column | NONE } ]
ALTER SEQUENCE name OWNER TO new_owner
ALTER SEQUENCE name RENAME TO new_name
ALTER SEQUENCE name SET SCHEMA new_schema

描述

ALTER SEQUENCE更改现有序列发生器的参数。在 ALTER SEQUENCE命令中未明确设置的参数,会保留其原有设置。

要使用ALTER SEQUENCE,必须拥有该序列。要更改序列的模式,还必须在新模式上拥有CREATE权限。要更改所有者,还必须是新所有者角色的直接或间接成员,并且该角色必须在序列所在模式上拥有CREATE权限。(这些限制确保更改所有者不会执行任何无法通过删除并重新创建序列完成的操作。不过,超级用户无论如何都可以更改任何序列的所有权。)

参数

name

要更改的序列名称(可以是模式限定的)。

increment

子句INCREMENT BY increment是可选的。正值会创建升序序列, 负值会创建降序序列。如果未指定,则保留原有的增量值。

minvalue
NO MINVALUE

可选子句MINVALUE minvalue确定序列可生成的最小值。 如果指定了NO MINVALUE,则升序序列和降序序列将分别使用默认值 1 和 -263-1。 如果两种选项都未指定,则保留当前最小值。

maxvalue
NO MAXVALUE

可选子句MAXVALUE maxvalue确定序列的最大值。 如果指定了NO MAXVALUE,则升序序列和降序序列将分别使用默认值 263-1 和 -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设置的起始值。

cache

CACHE cache子句启用预分配序列号并将其存储在内存中,以便更快访问。最小值为 1(一次只能生成一个值,即不缓存)。如果未指定,则保留旧的缓存值。

CYCLE

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

NO CYCLE

如果指定了可选关键字NO CYCLE,则当序列达到其最大值后,任何对 nextval的调用都会返回错误。如果既未指定CYCLE也未指定 NO CYCLE,则保留原有的循环行为。

OWNED BY table.column
OWNED BY NONE

OWNED BY选项使序列与特定表列关联;如果该列(或其整个表)被删除,序列也会自动删除。如果指定此选项,该关联会替换序列此前指定的任何关联。指定的表必须与序列拥有相同的所有者,并且位于同一模式中。指定OWNED BY NONE会移除现有的关联,使序列成为独立的对象。

new_owner

序列的新所有者的用户名。

new_name

该序列的新拥有者的用户名。

new_schema

该序列的新名称。

注解

为了避免阻塞从同一序列获取数字的并发事务,ALTER SEQUENCE对序列生成参数的更改永远不会被回滚;这些更改会立即生效且不可逆转。不过,OWNED BYOWNER TORENAME TOSET SCHEMA子句引起的是普通的目录更新,可以回滚。

ALTER SEQUENCE不会立即影响除当前后端之外、已经预分配(缓存)了序列值的其他后端中的 nextval结果。它们会先用完所有缓存值,然后才会注意到序列生成参数已经改变。 当前后端则会立即受到影响。

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

由于历史原因,序列也可以使用ALTER TABLE;但允许用于序列的 ALTER TABLE变体仅限于与上述形式等价的那些。

示例

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

ALTER SEQUENCE serial RESTART WITH 105;

兼容性

ALTER SEQUENCE符合SQL标准,但 START WITHOWNED BYOWNER TORENAME TOSET SCHEMA子句是PostgreSQL扩展。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。