暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB A CREATE TABLESPACE

墨天轮 2019-10-12
1080

CREATE TABLESPACE

功能描述

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

注意事项

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

语法格式

1
2
3
CREATE TABLESPACE tablespace_name
    [ OWNER user_name ] RELATIVE LOCATION 'directory' [ MAXSIZE 'space_size' ]
    [with_option_clause];

其中普通表空间的with_option_clause为:

1
2
3
WITH ( {filesystem= { 'general'| "general" | general} |
    random_page_cost = { 'value ' | value } |
    seq_page_cost = { 'value ' | value }}[,...])

其中HDFS表空间的with_option_clause为:

1
2
3
4
5
WITH ( filesystem= { 'systemtype '| "systemtype" | systemtype }
    [ { , address =  'ip:port [ {, ip:port }]' ], 
    cfgpath =  'path'  ,storepath =  'rootpath' 
    [{, random_page_cost = { 'value'| value }}]
    [{,seq_page_cost = { 'value'| value }}])

参数说明

  • tablespace_name

    要创建的表空间名称。

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

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

  • OWNER user_name

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

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

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

  • RELATIVE

    使用相对路径,LOCATION目录是相对于各个CN/DN数据目录下的。

    目录层次:CN和DN的数据目录/pg_location/相对路径

    相对路径最多指定两层。

  • LOCATION directory

    用于表空间的目录,对于目录有如下要求:

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

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

  • MAXSIZE 'space_size'

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

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

  • filesystem

    指定表空间是否为HDFS表空间。

    取值范围:

    • general:创建普通表空间。
    • hdfs:创建HDFS表空间。

    默认值:general。

    说明:

    只有指定了filesystem,才可以在“pg_tablespace”的“spcoptions”字段中显示相关信息。

  • 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

    指定HDFS集群NameNode主备节点的IP和port。

    取值范围:最多两个NameNode节点的IP、port组成的字符串。

    取值规则:只支持点分十进制格式的IPv4格式,且address字符串中不能出现空格,多组address以逗号作为分隔符。IP和port之间使用“:”来区分,IP、port组推荐设置两组,分别对应HDFS NameNode主备节点的address。

    说明:
    • 若不指定该参数,则HDFS的address的信息从HDFS集群配置文件中获取。若指定了address,则直接使用指定的address信息。
    • 创建HDFS表空间时,若address参数中IP格式正确,但不是有效的IP或者HDFS集群配置文件中配置错误的IP或者hostname,连接HDFS时会尝试重连,直到超时。超时时间的默认值为1分钟。因此,若用户配置无效地址时,系统会反复尝试连接HDFS服务器,期间无法中断,直到超时退出。
    • IP、port组不能超过两个。
    • 若创建的是普通表空间,则不允许指定。
  • cfgpath

    指定HDFS集群配置文件路径。

    取值范围:字符串。

    取值规则:必须为一个绝对路径,且为HDFS集群有效的配置文件路径。

    说明:
    • 若创建HDFS表空间,则必须指定,否则不指定。
    • 连接安全模式HDFS时,该路径必须是一个合法地址,且必须包含有效的配置文件。
    • 连接非安全模式HDFS时,如果指定了address,则不会对该路径地址及其中内容进行校验;如果没有指定address,该路径必须是一个合法地址,且必须包含有效的配置文件。
  • storepath

    指定HDFS上数据存储路径。

    取值范围:字符串。

    取值规则:

    • 目录必须为绝对路径。
    • 路径可以存在也可不存在,但是必须为有效的HDFS路径。
    • 必须为数据库用户可访问或者有权限创建的目录。
    说明:

    若创建HDFS表空间,则必须指定,否则不指定。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
--创建表空间。
CREATE TABLESPACE ds_location1 RELATIVE LOCATION 'hdfs_tablespace/hdfs_tablespace_1' ;

--创建用户joe。
CREATE ROLE joe IDENTIFIED BY 'Bigdata123@';

--创建用户jay。
CREATE ROLE jay IDENTIFIED BY 'Bigdata123@';

--创建表空间,且所有者指定为用户joe。
CREATE TABLESPACE ds_location2 OWNER joe RELATIVE LOCATION 'hdfs_tablespace/hdfs_tablespace_1' ;

--把表空间ds_location1重命名为ds_location3。
ALTER TABLESPACE ds_location1 RENAME TO ds_location3;

--改变表空间ds_location2的所有者。
ALTER TABLESPACE ds_location2 OWNER TO jay;

--删除表空间。
DROP TABLESPACE ds_location2;
DROP TABLESPACE ds_location3;
DROP TABLESPACE ds_location4;

--删除用户。
DROP ROLE joe;
DROP ROLE jay;

相关链接

CREATE DATABASE,CREATE TABLE,CREATE INDEX,DROP TABLESPACE,ALTER TABLESPACE


查看更多:华为GaussDB 200 SQL语法
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论