GaussDB-CREATE TABLESPACE

43 阅读4分钟

GaussDB-CREATE TABLESPACE

功能描述

在数据库中创建一个新的表空间。

注意事项
  • 系统管理员或者继承了内置角色gs_role_tablespace权限的用户可以创建表空间。
  • 不允许在一个事务块内部执行CREATE TABLESPACE。
  • 执行CREATE TABLESPACE失败,如果内部创建目录(文件)操作成功了就会产生残留的目录(文件),重新创建时需要用户手动清理表空间指定的目录下残留的内容。如果在创建过程中涉及到数据目录下的表空间软连接残留,需要先将软连接的残留文件删除,再重新执行OM相关操作。
  • CREATE TABLESPACE不支持两阶段事务,如果部分节点执行失败,不支持回滚。
语法格式

| ``` CREATE TABLESPACE tablespace_name [ OWNER user_name ] [ RELATIVE ] LOCATION 'directory' [ MAXSIZE 'space_size' ] [with_option_clause];

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

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

其中普通表空间的with_option_clause为:

| ```
WITH ({filesystem= { ' general ' | " general " | general } | address = { ' ip:port [, ... ] ' | " ip:port [, ... ] " } | cfgpath = { ' path ' | " path " } | storepath = { ' rootpath ' | " rootpath " } | random_page_cost = { ' value ' | " value " | value } | seq_page_cost = { ' value ' | " value " | value }}[, ... ]) 
``` |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

#### 参数说明

-   **tablespace_name**

    要创建的表空间名称。

    表空间名称不能和数据库中的其他表空间重名,且名称不能以"pg"开头,这样的名称留给系统表空间使用。

    取值范围:字符串,要符合[标识符命名规范](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0321.html#ZH-CN_TOPIC_0000001865746364__zh-cn_topic_0000001704458709_section14873217506)。

-   **OWNER user_name**

    指定该表空间的所有者。缺省时,新表空间的所有者是当前用户。

    只有系统管理员可以创建表空间,但是可以通过OWNER子句把表空间的所有权赋给其他非系统管理员。

    取值范围:字符串,已存在的用户。

-   **RELATIVE**

    若指定该参数,表示使用相对路径,LOCATION目录是相对于各个CN/DN数据目录下的。

    目录层次:CN和DN的数据目录/pg_location/相对路径。相对路径最多指定两层。

    若没有指定该参数,表示使用绝对表空间路径,LOCATION目录需要使用绝对路径。

-   **LOCATION directory**

    用于表空间的目录。当创建绝对表空间路径时,对于目录有如下要求:

    -   系统用户必须对该目录拥有读写权限,并且目录为空。如果该目录不存在,将由系统自动创建。
    -   目录必须是绝对路径,目录中不得含有特殊字符(如$,> 等)。
    -   目录不允许指定在数据库数据目录下。
    -   目录需为本地路径。

    取值范围:字符串,有效的目录。

-   **MAXSIZE 'space_size'**

    指定表空间在单个DN上的最大值。

    取值范围:字符串格式为正整数+单位,单位当前支持K/M/G/T/P。解析后的数值以K为单位,且范围不能够超过64比特表示的有符号整数,即1KB~9007199254740991KB。

-   **filesystem**

    指定表空间使用的文件系统。

    取值范围:

    general:普通文件系统。

    hdfs:Hadoop分布式文件系统。当前版本不支持。

    默认值:general。

-   **random_page_cost**

    指定随机读取page所需要的时间和资源。

    取值范围:0~1.79769e+308。

    默认值:使用GUC参数random_page_cost的值。

-   **seq_page_cost**

    指定顺序读取page所需要的时间和资源。

    取值范围:0~1.79769e+308。

    默认值:使用GUC参数seq_page_cost的值。

#### 示例

| ```
--创建表空间。 gaussdb=# CREATE TABLESPACE tbs_location1 RELATIVE LOCATION 'test_tablespace/test_tablespace_1';  --创建表空间指定最大值。 gaussdb=# CREATE TABLESPACE tbs_location2 RELATIVE LOCATION 'test_tablespace/test_tablespace_2' MAXSIZE '10G';  --查询表空间信息。 gaussdb=# SELECT * FROM pg_tablespace WHERE spcname = 'tbs_location2';     spcname    | spcowner | spcacl | spcoptions | spcmaxsize | relative  ---------------+----------+--------+------------+------------+----------  tbs_location2 |       10 |        |            | 10485760 K | t (1 row)  --创建用户joe。 gaussdb=# CREATE ROLE joe IDENTIFIED BY '********';  --创建表空间,且所有者指定为用户joe。 gaussdb=# CREATE TABLESPACE tbs_location3 OWNER joe RELATIVE LOCATION 'test_tablespace/test_tablespace_3';  --删除表空间及用户。 gaussdb=# DROP TABLESPACE tbs_location1; gaussdb=# DROP TABLESPACE tbs_location2; gaussdb=# DROP TABLESPACE tbs_location3; gaussdb=# DROP ROLE joe; 
``` |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

#### 相关链接

[CREATE DATABASE](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0539.html#ZH-CN_TOPIC_0000001911586057),[CREATE TABLE](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0568.html#ZH-CN_TOPIC_0000001911585693),[CREATE INDEX](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0550.html#ZH-CN_TOPIC_0000001865747256),[DROP TABLESPACE](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0620.html#ZH-CN_TOPIC_0000001911585533),[ALTER TABLESPACE](https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/devg-dist/gaussdb-12-0511.html#ZH-CN_TOPIC_0000001911586165)

#### 优化建议

CREATE TABLESPACE不建议在事务内部创建表空间。

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