
# ALTER TABLESPACE
#### 功能描述
修改表空间的属性。
#### 注意事项
- 只有表空间的所有者或者被赋予了表空间ALTER权限的用户有权限执行ALTER TABLESPACE命令，系统管理员默认拥有此权限。但要修改表空间的所有者，当前用户必须是该表空间的所有者或系统管理员，且该用户是new_owner角色的成员。
- 对行存表的ALTER TABLESPACE操作不支持在事务块中执行。
- 要修改表空间的所有者A为B，则A必须是B的直接或者间接成员。
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  如果new_owner与old_owner一致，此处不再校验当前执行操作的用户是否具有修改权限，而直接显示ALTER成功。
  
 
#### 语法格式
- 重命名表空间的语法。
  ```
  ALTER TABLESPACE tablespace_name 
      RENAME TO new_tablespace_name;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558057267.png "点击放大")
  
- 设置表空间所有者的语法。
  ```
  ALTER TABLESPACE tablespace_name 
      OWNER TO new_owner;
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558217235.png "点击放大")
  
- 设置表空间属性的语法。
  ```
  ALTER TABLESPACE tablespace_name 
      SET ( { tablespace_option = value } [, ... ] );
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002527057378.png "点击放大")
  
- 重置表空间属性的语法。
  ```
  ALTER TABLESPACE tablespace_name 
      RESET ( { tablespace_option } [, ... ] );
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002558057265.png "点击放大")
  
- 设置表空间限额的语法。
  ```
  ALTER TABLESPACE tablespace_name 
      RESIZE MAXSIZE { UNLIMITED | 'space_size'};
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/figure/zh-cn_image_0000002526897422.png "点击放大")
  
 
#### 参数说明
- **tablespace_name**
  要修改的表空间。
  取值范围：已存在的表空间名。
  
- **new_tablespace_name**
  表空间的新名称，新名称不能以"PG_"开头。
  取值范围：字符串，符合[标识符命名规范](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0322.html#ZH-CN_TOPIC_0000002559105775__zh-cn_topic_0000002558056023_section14873217506)。
  
- **new_owner**
  表空间的新所有者。
  取值范围：已存在的用户名。
  
- **tablespace_option**
  设置或者重置表空间的参数。
  取值范围：
  - seq_page_cost：设置优化器计算一次顺序获取磁盘页面的开销。缺省为1.0。
  
  - random_page_cost：设置优化器计算一次非顺序获取磁盘页面的开销。缺省为4.0。
    ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
    - random_page_cost是相对于seq_page_cost的取值，等于或者小于seq_page_cost时毫无意义。
    
    - 默认值为4.0的前提条件是，优化器采用索引来扫描表数据，并且表数据在cache中命中率可以90%左右。
    
    - 如果表数据空间要比物理内存小，那么减小该值到一个适当水平；相反地，如果表数据在cache中命中率要低于90%，那么适当增大该值。
    
    - 如果采用了类似于SSD的随机访问代价较小的存储器，可以适当减小该值，以反映真正的随机扫描代价。
      
  
  
  value的取值范围：浮点类型的正数。
  
- **RESIZE MAXSIZE**
  重新设置表空间限额的数值。
  取值范围：
  - UNLIMITED，该表空间不设置限额。
  
  - 由space_size来确定，其格式参考[CREATE TABLESPACE](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0568.html#ZH-CN_TOPIC_0000002527986160)。
    ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
    - 若调整后的限额值比当前表空间实际使用的值要小，调整操作可以执行成功，后续用户需要将该表空间的使用值降低到新限额值之下，才能继续往该表空间中写入数据。
      
   
 
#### 示例
- **重命名表空间** 。
  ```
  --创建表空间。
  gaussdb=# CREATE TABLESPACE tbs_data1 RELATIVE LOCATION 'tablespace1/tbs_data1';
  --重命名表空间。
  gaussdb=# ALTER TABLESPACE tbs_data1 RENAME TO tbs_data2;
  --查询。
  gaussdb=# \db tbs_data2
              List of tablespaces
     Name    | Owner |       Location        
  -----------+-------+-----------------------
   tbs_data2 | omm   | tablespace1/tbs_data1
  ```
  
- **设置表空间所有者** 。
  **示例：**
  ```
  --创建用户。
  gaussdb=# CREATE USER test PASSWORD '********';
  --修改表空间所有者。
  gaussdb=# ALTER TABLESPACE tbs_data2 OWNER TO test;
  --查看。
  gaussdb=# \db tbs_data2
              List of tablespaces
     Name    | Owner |       Location        
  -----------+-------+-----------------------
   tbs_data2 | test  | tablespace1/tbs_data1
  (1 row)
  ```
  
- **设置表空间属性** 。
  **示例：**
  ```
  --修改seq_page_cost的值。
  gaussdb=# ALTER TABLESPACE tbs_data2 SET (seq_page_cost = 10);
  --查看。
  gaussdb=# SELECT * FROM pg_tablespace WHERE spcname = 'tbs_data2';
    spcname  | spcowner | spcacl |     spcoptions     | spcmaxsize | relative 
  -----------+----------+--------+--------------------+------------+----------
   tbs_data2 |    16778 |        | {seq_page_cost=10} |            | t
  (1 row)
  ```
  
- **重置表空间属性** 。
  ```
  --将seq_page_cost参数的值重置为缺省值。
  gaussdb=# ALTER TABLESPACE tbs_data2 RESET (seq_page_cost);
  --查看。
  gaussdb=# SELECT * FROM pg_tablespace WHERE spcname = 'tbs_data2';
    spcname  | spcowner | spcacl | spcoptions | spcmaxsize | relative 
  -----------+----------+--------+------------+------------+----------
   tbs_data2 |    16778 |        |            |            | t
  (1 row)
  ```
  
- **设置表空间限额** 。
  **示例：**
  ```
  --设置表空间最大使用的空间。
  gaussdb=# ALTER TABLESPACE tbs_data2 RESIZE MAXSIZE '10G';
  --查看。
  gaussdb=# SELECT * FROM pg_tablespace WHERE spcname = 'tbs_data2';
    spcname  | spcowner | spcacl | spcoptions | spcmaxsize | relative 
  -----------+----------+--------+------------+------------+----------
   tbs_data2 |    16778 |        |            | 10485760 K | t
  (1 row)
  --删除表空间。
  gaussdb=# DROP TABLESPACE tbs_data2;
  --删除用户。
  gaussdb=# DROP USER test;
  ```
  
 
#### 相关链接
[CREATE TABLESPACE](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0568.html#ZH-CN_TOPIC_0000002527986160)，[DROP TABLESPACE](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0618.html#ZH-CN_TOPIC_0000002558946049)
