ALTER SEQUENCE
ALTER SEQUENCE
更改一个序列发生器的定义。
概要
ALTER SEQUENCE [ IF EXISTS ] 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 [ IF EXISTS ] name OWNER TO new_owner 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特权。 注意超级用户自动拥有所有的特权。.
要改变所有者,用户必须是新角色的直接或者间接成员,而且新角色必须在序列的模式上拥有CREATE权限 (这些限制迫使更改所有者不能执行删除和重新创建序列所无法做的任何事情。 但是,超级用户仍然可以更改任何序列的所有权。)
参数
- name
- 要修改的序列的名称(可选方案限定)。
- IF EXISTS
- 如果序列不存在不会抛出错误,而只会触发一次提醒。
- 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更改记录的序列起始值。 这对current 序列值没有影响。 它只是设置将来的ALTER SEQUENCE RESTART 命令将使用的值。
- restart
- 可选子句 RESTART [ WITH restart ] 更改序列的当前值。 这等效于使用 is_called = false 调用 setval(sequence, start_val, is_called) 函数。 指定的值将由 nextval(sequence) 函数的下一次调用返回。 在没有 restart 值的情况下写入RESTART等同于提供由 CREATE SEQUENCE 记录或由 ALTER SEQUENCE START WITH 最后设置的开始值。
- new_owner
- 序列新所有者的用户名。
- cache
- CACHE cache子句中使序列号可以预先分配并存储在内存中,以加快访问速度。 最小值为1(一次只能生成一个值,即没有高速缓存)。 如果未指定,则将保留旧的缓存值
- CYCLE
- 可选的CYCLE关键字可用于在序列由升序或降序达到maxvalue或minvalue时使序列回绕。 如果达到限制,则生成的下一个数字将是各自的minvalue或maxvalue。
- NO CYCLE
- 如果指定了可选的NO CYCLE关键字,则在序列达到最大值后,对nextval()的任何调用都将返回错误。 如果未指定CYCLE或NO CYCLE,则将保留旧的循环行为。
- OWNED BY table.column
- OWNED BY NONE
- OWNED BY选项使序列与特定的表列相关联,这样,如果该列(或其整个表)被删除,该序列也将被自动删除。 如果指定,则此关联替换该序列的任何先前指定的关联。 指定的表必须具有相同的所有者,并且与序列具有相同的架构。 指定OWNED BY NONE会删除任何现有的表列关联。
- new_name
- 序列的新名称。
- new_schema
- 序列的新模式。
注意
为了避免阻塞从同一序列中获取数字的并发事务,永远不会回滚ALTER SEQUENCE对序列生成参数的影响。 这些更改将立即生效,并且不可逆。 但是,OWNED BY, OWNER TO, RENAME TO 和SET SCHEMA子句是普通的目录更新,可以回滚。
ALTER SEQUENCE 不会立即影响除当前会话以外的具有预分配(缓存)序列值的会话中的nextval()结果。 在注意到更改的序列生成参数之前,它们将用尽所有缓存的值。 当前会话将立即受到影响。
由于历史原因, ALTER TABLE 也可以与序列一起使用。 但是序列允许的 ALTER TABLE的唯一变体与上述形式等效。
示例
重启一个被称为serial的序列在105:
ALTER SEQUENCE serial RESTART WITH 105;
兼容性
ALTER SEQUENCE符合SQL标准,START WITH, OWNED BY, OWNER TO, RENAME TO和 SET SCHEMA子句除外,它们是Greenplum数据库的扩展。