GaussDB-ALTER TABLESPACE

65 阅读4分钟

GaussDB-ALTER TABLESPACE

功能描述

修改表空间的属性。

注意事项
  • 只有表空间的所有者或者被赋予了表空间ALTER权限的用户有权限执行ALTER TABLESPACE命令,系统管理员默认拥有此权限。但要修改表空间的所有者,当前用户必须是该表空间的所有者或系统管理员,且该用户是new_owner角色的成员。

  • 对行存表的ALTER TABLESPACE操作不支持在事务块中执行。

  • 要修改表空间的所有者A为B,则A必须是B的直接或者间接成员。

    如果new_owner与old_owner一致,此处不再校验当前执行操作的用户是否具有修改权限,而直接显示ALTER成功。

语法格式
  • 重命名表空间的语法。

    | ``` ALTER TABLESPACE tablespace_name RENAME TO new_tablespace_name;

    | ----------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c47f6a2f160e4709883bd2959b2e8443~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770774574&x-signature=7EYDFC6xGEerU8ll6rT%2FcUqdnEQ%3D)
    
    
  • 设置表空间所有者的语法。

    | ``` ALTER TABLESPACE tablespace_name OWNER TO new_owner;

    | ------------------------------------------------------------------ |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/205589cf31834c658141a09504262357~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770774574&x-signature=6kth%2Bp%2FqZYZ3kb69nkqetLAJkCU%3D)
    
    
  • 设置表空间属性的语法。

    | ``` ALTER TABLESPACE tablespace_name SET ( { tablespace_option = value } [, ... ] );

    | ---------------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c15399d3924d42faa7da1b6324da4446~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770774574&x-signature=8WsgOKcRSRZUTkgUKUvST3lCPBc%3D)
    
    
  • 重置表空间属性的语法。

    | ``` ALTER TABLESPACE tablespace_name RESET ( { tablespace_option } [, ... ] );

    | ---------------------------------------------------------------------------------------- |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/1a49c54f4f384b7bb72aaea9e495e570~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770774574&x-signature=OiXFtIgg9BFPJL8seuFlrI54R64%3D)
    
    
  • 设置表空间限额的语法。

    | ``` ALTER TABLESPACE tablespace_name RESIZE MAXSIZE { UNLIMITED | 'space_size'};

    | ------------------------------------------------------------------------------------------ |
    
    ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/0f13c1deb0424861bde359820b305b19~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgamVycnl3YW5nMTk4Mw==:q75.awebp?rk3s=f64ab15b&x-expires=1770774574&x-signature=nZItwgdKUwskCcWI0lkV6Opkhc4%3D)
    
参数说明
  • tablespace_name

    要修改的表空间。

    取值范围:已存在的表空间名。

  • new_tablespace_name

    表空间的新名称,新名称不能以"PG_"开头。

    取值范围:字符串,符合标识符命名规范

  • new_owner

    表空间的新所有者。

    取值范围:已存在的用户名。

  • tablespace_option

    设置或者重置表空间的参数。

    取值范围:

    • seq_page_cost:设置优化器计算一次顺序获取磁盘页面的开销。缺省为1.0。

    • random_page_cost:设置优化器计算一次非顺序获取磁盘页面的开销。缺省为4.0。

      • random_page_cost是相对于seq_page_cost的取值,等于或者小于seq_page_cost时毫无意义。
      • 默认值为4.0的前提条件是,优化器采用索引来扫描表数据,并且表数据在cache中命中率可以90%左右。
      • 如果表数据空间要比物理内存小,那么减小该值到一个适当水平;相反地,如果表数据在cache中命中率要低于90%,那么适当增大该值。
      • 如果采用了类似于SSD的随机访问代价较小的存储器,可以适当减小该值,以反映真正的随机扫描代价。

    value的取值范围:浮点类型的正数。

  • RESIZE MAXSIZE

    重新设置表空间限额的数值。

    取值范围:

    • UNLIMITED,该表空间不设置限额。

    • 由space_size来确定,其格式参考CREATE TABLESPACE

      • 若调整后的限额值比当前表空间实际使用的值要小,调整操作可以执行成功,后续用户需要将该表空间的使用值降低到新限额值之下,才能继续往该表空间中写入数据。
示例
  • 重命名表空间

    --创建表空间。
    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 TABLESPACEDROP TABLESPACE

更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…