
# 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://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/figure/zh-cn_image_0000002558053715.png "点击放大")
  

- 修改序列的拥有者：
  ```
  ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner;
  ```
  ![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/figure/zh-cn_image_0000002527053830.png "点击放大")
  
 
#### 参数说明
- **name**
  将要修改的序列名称。
  
- **IF EXISTS**
  当序列不存在时使用该选项，不会显示ERROR，而是返回一个NOTICE信息。
  
- **MAXVALUE maxvalue \| NO MAXVALUE \| NOMAXVALUE**
  执行序列的最大值。新修改的最大值必须大于当前的last_value；如果没有指定，将保持旧的最大值。
  取值范围：(last_value, 2^63^-1\] ，使用LARGE标识时则为(last_value, 2^127^-1\]。
  
- **OWNED BY**
  将序列和一个表的指定字段进行关联。这样，在删除指定字段或其所在表的时候会自动删除已关联的序列。
  如果序列已经和表有关联后，使用这个选项后新的关联关系会覆盖旧的关联。
  关联的表和序列的所有者必须是同一个用户，并且在同一个模式中。
  使用OWNED BY NONE将删除任何已经存在的关联。
  
- **new_owner**
  序列新所有者的用户名。用户要修改序列的所有者，必须是新角色的直接或者间接成员，并且该角色必须有序列所在模式上的CREATE权限，用户名要求详见[•user_name](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-81-0080.html#ZH-CN_TOPIC_0000002527965422__zh-cn_topic_0000002557933339_zh-cn_topic_0000001783205569_zh-cn_topic_0283136891_zh-cn_topic_0237122125_zh-cn_topic_0059778166_l787859d7e0cd43babcd1c035703c3448)。
  
 
#### 示例
```
--创建一个名为serial的递增序列，从101开始。
m_db=# CREATE SEQUENCE serial START 101;
--查询serial的下个值
m_db=# SELECT pg_catalog.nextval('serial');
 nextval 
---------
     101
(1 row)
--将序列serial的最大值改为101。
m_db=# ALTER SEQUENCE serial MAXVALUE 101;
ERROR:  Can not alter sequence uuid 1000011 maxval from 9223372036854775807 to 101, because new maxval 101 should be greater than currval 101 in gtm.
--删除序列。
m_db=# DROP SEQUENCE serial CASCADE;
```
#### 相关链接
[CREATE SEQUENCE](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-81-0076.html#ZH-CN_TOPIC_0000002558805289)，[DROP SEQUENCE](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-81-0094.html#ZH-CN_TOPIC_0000002558925215)
