ALTER SEQUENCE — 更改序列生成器的定义
ALTER SEQUENCE [ IF EXISTS ]name[ ASdata_type] [ INCREMENT [ BY ]increment] [ MINVALUEminvalue| NO MINVALUE ] [ MAXVALUEmaxvalue| NO MAXVALUE ] [ START [ WITH ]start] [ RESTART [ [ WITH ]restart] ] [ CACHEcache] [ [ NO ] CYCLE ] [ OWNED BY {table_name.column_name| NONE } ] ALTER SEQUENCE [ IF EXISTS ]nameSET { LOGGED | UNLOGGED } ALTER SEQUENCE [ IF EXISTS ]nameOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER SEQUENCE [ IF EXISTS ]nameRENAME TOnew_nameALTER SEQUENCE [ IF EXISTS ]nameSET SCHEMAnew_schema
ALTER SEQUENCE 更改现有序列生成器的参数。在 ALTER SEQUENCE 命令中未明确设置的任何参数都保留其之前的设置。
您必须拥有序列才能使用 ALTER SEQUENCE。要更改序列的架构,您还必须对新架构拥有 CREATE 权限。要更改所有者,您必须能够将 SET ROLE 设置为新的所有者角色,并且该角色必须对序列的架构拥有 CREATE 权限。(这些限制强制要求更改所有者不会执行通过删除和重新创建序列无法执行的任何操作。但是,超级用户无论如何都可以更改任何序列的所有权。)
name要更改的序列的名称(可选的架构限定)。
IF EXISTS如果序列不存在,则不引发错误。在这种情况下,会发出通知。
data_type可选子句 AS 更改序列的数据类型。有效类型为 data_typesmallint、integer 和 bigint。
更改数据类型会自动更改序列的最小值和最大值,当且仅当之前的最小值和最大值是旧数据类型的最小值或最大值(换句话说,如果序列是使用 NO MINVALUE 或 NO MAXVALUE 创建的,无论是否明确)。否则,最小值和最大值将保留,除非作为同一命令的一部分给出了新值。如果最小值和最大值不适合新数据类型,则会生成错误。
increment子句 INCREMENT BY 是可选的。正值将生成升序序列,负值将生成降序序列。如果未指定,则将保留旧增量值。increment
minvalueNO MINVALUE可选子句 MINVALUE 确定序列可以生成的最小值。如果指定了 minvalueNO MINVALUE,则将使用 1 的默认值和升序和降序序列的数据类型的最小值。如果未指定任何选项,则将保留当前最小值。
maxvalueNO MAXVALUE可选子句 MAXVALUE 确定序列的最大值。如果指定 maxvalueNO MAXVALUE,将使用数据类型的最大值和分别为升序和降序序列的 -1 的默认值。如果未指定任何选项,将保留当前最大值。
start可选子句 START WITH 更改序列的记录的起始值。这不会影响 当前 序列值;它只是设置未来 startALTER SEQUENCE RESTART 命令将使用的值。
restart可选子句 RESTART [ WITH 更改序列的当前值。这类似于使用 restart ]is_called = false 调用 setval 函数:指定的值将由 nextval 的 下一个 调用返回。编写没有 restart 值的 RESTART 等同于提供由 CREATE SEQUENCE 记录或上次由 ALTER SEQUENCE START WITH 设置的起始值。
与 setval 调用相反,序列上的 RESTART 操作是事务性的,并阻止并发事务从同一序列获取数字。如果这不是所需的操作模式,则应使用 setval。
cache子句 CACHE 启用序列号的预分配并存储在内存中以加快访问速度。最小值为 1(一次只能生成一个值,即没有缓存)。如果未指定,将保留旧的缓存值。cache
CYCLE可选 CYCLE 关键字可用于启用序列在升序或降序序列达到 maxvalue 或 minvalue 时进行环绕。如果达到限制,生成的下一个数字将分别为 minvalue 或 maxvalue。
NO CYCLE如果指定了可选的 NO CYCLE 关键字,在序列达到其最大值后对 nextval 的任何调用都将返回一个错误。如果既未指定 CYCLE 也未指定 NO CYCLE,则将保留旧的循环行为。
SET { LOGGED | UNLOGGED }此表单将序列从未记录更改为已记录或反之亦然(请参阅 CREATE SEQUENCE)。它不能应用于临时序列。
OWNED BY table_name.column_nameOWNED BY NONEOWNED BY 选项导致序列与特定表列相关联,这样,如果该列(或其整个表)被删除,则序列也将被自动删除。如果指定,此关联将替换之前为序列指定的任何关联。指定的表必须具有与序列相同的拥有者,并且位于与序列相同的架构中。指定 OWNED BY NONE 将删除任何现有关联,使序列 “独立”。
new_owner序列的新所有者的用户名。
new_name序列的新名称。
new_schema序列的新架构。
ALTER SEQUENCE 不会立即影响除当前后端之外已预先分配(缓存)序列值的后台中的 nextval 结果。在注意到更改的序列生成参数之前,它们将用完所有缓存的值。当前后端将立即受到影响。
ALTER SEQUENCE 不会影响序列的 currval 状态。(在 PostgreSQL 8.3 之前,它有时会这样做。)
ALTER SEQUENCE 阻止并发 nextval、currval、lastval 和 setval 调用。
由于历史原因,ALTER TABLE 也可以与序列一起使用;但 ALTER TABLE 允许与序列一起使用的唯一变体等同于上面显示的表单。
重新启动一个名为 serial 的序列,从 105 开始
ALTER SEQUENCE serial RESTART WITH 105;
ALTER SEQUENCE 符合 SQL 标准,但 AS、START WITH、OWNED BY、OWNER TO、RENAME TO 和 SET SCHEMA 子句除外,它们是 PostgreSQL 扩展。
如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。