更新时间:2022-07-29 GMT+08:00

CREATE TABLESPACE

功能描述

在数据库中创建一个OBS表空间,该特性仅8.1.1版本支持。

注意事项

  • 只有系统管理员可以创建表空间。
  • 不允许在一个事务块内部执行CREATE TABLESPACE。
  • 执行CREATE TABLESPACE失败,如果内部创建目录(文件)操作成功了就会产生残留的目录(文件),重新创建时需要用户手动清理表空间指定的目录下残留的内容。如果在创建过程中涉及到数据目录下的表空间软连接残留,需要先将软连接的残留文件删除,再重新执行OM相关操作。
  • CREATE TABLESPACE不支持两阶段事务,如果部分节点执行失败,不支持回滚。
  • 不建议使用绝对表空间以及相对表空间,推荐使用默认表空间default_tablespace。
  • 创建表空间前的准备工作参考下述参数说明。

语法格式

1
2
3
CREATE TABLESPACE tablespace_name
    [ OWNER user_name ]  [ MAXSIZE 'space_size' ]
    [with_option_clause];
其中OBS表空间的with_option_clause为:
1
2
3
4
WITH ( filesystem= { 'obs'| "obs" | obs},
    address =  'endpoint', 
    access_key =  'ak', secret_access_key =  'sk'
    encrypt = 'on' | 'off’, storepath =  'rootpath' )

参数说明

  • tablespace_name

    要创建的表空间名称。

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

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

  • OWNER user_name

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

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

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

  • filesystem

    指定表空间为OBS空间。

    取值范围:OBS

  • random_page_cost

    指定随机读取page的开销。

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

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

  • seq_page_cost

    指定顺序读取page的开销。

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

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

  • address

    指定OBS服务的endpoint。

    取值规则:只支持点分十进制格式的IPv4格式,且address字符串中不能出现空格,IP和port之间使用“:”来区分,若创建的是普通表空间,则不允许指定。

  • storepath

    OBS上数据存储路径。

    取值范围:字符串。

    取值规则:/并行文件系统桶名/路径/

  • access_key

    OBS访问协议对应的AK值(OBS云服务界面由用户获取),创建外表时AK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。

  • secret_access_key

    OBS访问协议对应的SK值(OBS云服务界面由用户获取),创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。

  • encrypt
    • 是否对数据进行加密,该参数仅支持type为OBS时设置。默认值为off。

      取值范围:

      on表示对数据进行加密。

      off表示不对数据进行加密。

示例

创建OBS表空间:

CREATE TABLESPACE ds_location1   WITH(filesystem=obs, address='obs URL', access_key='xxxxxx',  secret_access_key='xxxxxx', encrypt='on', storepath='/obs_bucket/obs_tablespace');

创建用户joe:

CREATE ROLE joe IDENTIFIED BY 'password1';

创建用户jay:

CREATE ROLE jay IDENTIFIED BY 'password2';

创建表空间,且所有者指定为用户joe:

CREATE TABLESPACE ds_location2 OWNER joe WITH(filesystem=obs, address='obs URL', access_key='xxxxxx',  secret_access_key='xxxxxx', encrypt='on', storepath='/obs_bucket/obs_tablespace');