更新时间:2024-06-29 GMT+08:00
分享

ALTER SEQUENCE

功能描述

修改序列定义。

注意事项

  • 使用ALTER SEQUENCE的用户必须是该序列的所有者。
  • 当前版本仅支持修改拥有者、归属列和最大值。若要修改其他参数,可以删除重建,并用Setval函数恢复当前值。
  • ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。
  • 修改序列的最大值后,会清空该序列在所有会话的cache。
  • ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用。

语法格式

修改序列最大值或归属列

1
2
3
ALTER SEQUENCE [ IF EXISTS ] name 
    [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE ]
    [ OWNED BY { table_name.column_name | NONE } ] ;

修改序列的拥有者

1
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner;

参数说明

  • name

    要修改的序列名称。

  • IF EXISTS

    当序列不存在时使用该选项不会出现错误消息,仅有一个通知。

  • MAXVALUE maxvalue | NO MAXVALUE

    序列所能达到的最大值。如果声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE。

  • OWNED BY

    将序列和一个表的指定字段进行关联。这样,在删除指定字段或其所在表的时候会自动删除已关联的序列。

    如果序列已经和表有关联后,使用OWNED BY参数后新的关联关系会覆盖旧的关联。

    关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。

    使用OWNED BY NONE将删除任何已经存在的关联。

  • new_owner

    序列新所有者的用户名。用户要修改序列的所有者,必须是新角色的直接或者间接成员,并且所有者角色必须有序列所在模式上的CREATE权限。

示例

创建示例序列seq_test和示例表t1:

1
CREATE SEQUENCE seq_test START 101;
1
2
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(c1 bigint default nextval('seq_test'));

将序列serial的最大值修改为200:

1
ALTER SEQUENCE seq_test MAXVALUE 200;

将序列seq_test的归属列变为t1.c1:

1
ALTER SEQUENCE seq_test OWNED BY t1.c1;

相关文档