GaussDB-ALTER SEQUENCE

174 阅读2分钟

GaussDB-ALTER SEQUENCE

功能描述

修改一个现有的序列的参数。

注意事项
  • 序列的所有者或者被授予了序列ALTER权限的用户或者被授予了ALTER ANY SEQUENCE权限的用户才能执行ALTER SEQUENCE命令,三权分立开关关闭时,系统管理员默认拥有该权限。但要修改序列的所有者,当前用户必须是该序列的所有者或者系统管理员,且该用户是新所有者角色的成员。
  • 当前版本仅支持修改拥有者、归属列和最大值。若要修改其他参数,可以删除重建,并用Setval函数恢复当前值。
  • ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。
  • 修改序列的最大值后,会清空该序列在所有会话的cache。
  • ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用、
语法格式
  • 修改序列归属列和最大值。

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

| --------------------------------------------------------------------------------------------------------------------------------------------------- |

![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8cb8ae68ee6a4176a3a08ef06f2d575c~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1774317605&x-signature=OFUru1KiLkSlNKDWepy2pvJ4Z8I%3D)

-   修改序列的拥有者。

| ```
ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner; 
``` |
| -------------------------------------------------------------- |

![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/71962bd728ac4703912dd6b386160030~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1774317605&x-signature=M6bnEMbznILgDG6LWYBgpK2CJJg%3D)

#### 参数说明

-   **name**

    将要修改的序列名称。

-   **IF EXISTS**

    当序列不存在时使用该选项,不会显示ERROR,而是返回一个NOTICE信息。

-   **MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE**

    执行序列的最大值。新修改的最大值必须大于当前gtm存储的最大值;如果没有指定,将保持原有的最大值。

    取值范围:(gtm_last_value, 263-1]。

-   **OWNED BY**

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

    如果序列已经和表有关联后,使用这个选项后新的关联关系会覆盖旧的关联。

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

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

-   **new_owner**

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

#### 示例

| ```
--创建一个名为serial的递增序列,从101开始。 gaussdb=# CREATE SEQUENCE serial START 101;  --创建一个表,定义默认值。 gaussdb=# CREATE TABLE t1(c1 bigint default nextval('serial'));  --将序列serial的归属列变为t1.c1。 gaussdb=# ALTER SEQUENCE serial OWNED BY t1.c1;  --删除序列和表。 gaussdb=# DROP SEQUENCE serial CASCADE; gaussdb=# DROP TABLE t1; 
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

#### 相关链接

[CREATE SEQUENCE](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0565.html#ZH-CN_TOPIC_0000001865585968),[DROP SEQUENCE](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0616.html#ZH-CN_TOPIC_0000001911585553)

更多详情请参考GaussDB 文档中心:<https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/productdesc/qlh_03_0001.html>