ALTER SEQUENCE
ALTER SEQUENCE¶
更改一个序列发生器的定义。
- 语法
-
``` sql 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权限(这些限制迫使更改所有者不能执行删除和重新创建序列所无法做的任何事情。 但是,超级用户仍然可以更改任何序列的所有权。) - 参数
-
该SQL命令参数说明见下
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子句除外,它们是SeaboxMPP数据库的扩展。- 相关SQL命令
CREATE SEQUENCE,DROP SEQUENCE,ALTER TABLE