当前位置: 首页 > article >正文

openGauss数据库-头歌实验1-2 创建和管理表空间

一、创建表空间

任务描述

本关任务:基于 openGauss 学习创建表空间的相关知识。

相关知识

为了完成本关任务,你需要掌握:1.openGauss 的常用操作,2.SQL 创建表空间相关语法。

背景知识

通过使用表空间,管理员可以控制一个数据库安装的磁盘布局。这样有以下优点:

1.如果初始化数据库所在的分区或者卷空间已满,又不能逻辑上扩展更多空间,可以在不同的分区上创建和使用表空间,直到系统重新配置空间。

2.表空间允许管理员根据数据库对象的使用模式安排数据位置,从而提高性能。

3.管理员通过表空间可以设置占用的磁盘空间。用以在和其他数据共用分区的时候,防止表空间占用相同分区上的其他空间。

4.表空间对应于一个文件系统目录,假定数据库节点数据目录/pg_location/mount1/path1是用户拥有读写权限的空目录。

使用表空间配额管理会使性能有30%左右的影响,MAXSIZE 指定每个数据库节点的配额大小,误差范围在500MB以内。请根据实际的情况确认是否需要设置表空间的最大值。

openGauss自带了两个表空间:pg_default和pg_global。

1.默认表空间pg_default:用来存储非共享系统表、用户表、用户表index、临时表、临时表index、内部临时表的默认表空间。对应存储目录为实例数据目录下的base目录。

2.共享表空间pg_global:用来存放共享系统表的表空间。对应存储目录为实例数据目录下的global目录。

注意事项

1.系统管理员或者继承了内置角色gs_roles_tablespace权限的用户可以创建表空间。

2.不允许在一个事务块内部执行CREATE TABLESPACE。

3.执行CREATE TABLESPACE失败,如果内部创建目录(文件)操作成功了就会产生残留的目录(文件),重新创建时需要用户手动清理表空间指定的目录下残留的内容。如果在创建过程中涉及到数据目录下的表空间软连接残留,需要先将软连接的残留文件删除,再重新执行OM相关操作。

4.CREATE TABLESPACE不支持两阶段事务,如果部分节点执行失败,不支持回滚。

5.在 HCS 等场景下一般不建议用户使用自定义的表空间。

语法格式

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

其中普通表空间的with\_option\_clause为:

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

参数说明

1.tablespace_name

  要创建的表空间名称。

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

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

2.OWNER user_name

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

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

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

3.RELATIVE

  使用相对路径,LOCATION目录是相对于各个数据库节点数据目录下的。

  目录层次:数据库节点的数据目录/pg_location/相对路径

  相对路径最多指定两层。

4.LOCATION directory

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

        1.openGauss系统用户必须对该目录拥有读写权限,并且目录为空。如果该目录不存在,将由系统自动创建。
        2.目录必须是绝对路径,目录中不得含有特殊字符(如$、> 等)。
        3.目录不允许指定在数据库数据目录下。
        4.目录需为本地路径。
  取值范围:字符串,有效的目录。

5.MAXSIZE 'space_size'

  指定表空间在单个数据库节点上的最大值。

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

6.random_page_cost

  指定随机读取page的开销。

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

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

7.seq_page_cost

  指定顺序读取page的开销。

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

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

示例语句

--创建表空间。
openGauss=# CREATE TABLESPACE ds_location1 RELATIVE LOCATION 'tablespace/tablespace_1';
--创建用户joe。
openGauss=# CREATE ROLE joe IDENTIFIED BY 'xxxxxxxxx';
--创建表空间,且所有者指定为用户joe。
openGauss=# CREATE TABLESPACE ds_location2 OWNER joe RELATIVE LOCATION 'tablespace/tablespace_1';

编程要求

根据提示,在右侧命令行进行操作,在 postgres 数据库中创建表空间 fastspace,指定 owner 为 omm,并指定相对路径为tablespace/tablespace_1。

编程实现

 

二、修改表空间

任务描述

本关任务:基于 openGauss 学习修改表空间的相关知识。

相关知识

为了完成本关任务,你需要掌握:1.openGauss 的常用操作,2.SQL 修改表空间相关语法。

注意事项

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

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

说明: 

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

语法格式

1.重命名表空间的语法。
ALTER TABLESPACE tablespace_name 
    RENAME TO new_tablespace_name;
2.设置表空间所有者的语法。
ALTER TABLESPACE tablespace_name 
    OWNER TO new_owner;
3.设置表空间属性的语法。
ALTER TABLESPACE tablespace_name 
    SET ( {tablespace_option = value} [, ... ] );
4.重置表空间属性的语法。
ALTER TABLESPACE tablespace_name 
    RESET ( { tablespace_option } [, ...] );
5.设置表空间限额的语法。
ALTER TABLESPACE tablespace_name 
    RESIZE MAXSIZE { UNLIMITED | 'space_size'};

参数说明

1.tablespace_name

  要修改的表空间。

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

2.new_tablespace_name

  表空间的新名称。

  新名称不能以"PG_"开头。

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

2.new_owner

  表空间的新所有者。

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

3.tablespace_option

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

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

4.RESIZE MAXSIZE

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

  取值范围:

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

由space_size来确定。

说明: 

若调整后的限额值比当前表空间实际使用的值要小,调整操作可以执行成功,后续用户需要将该表空间的使用值降低到新限额值之下,才能继续往该表空间中写入数据。
修改参数MAXSIZE时也可使用:
 

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

示例语句

--创建表空间。
openGauss=# CREATE TABLESPACE ds_location1 RELATIVE LOCATION 'tablespace/tablespace_1';

--创建用户joe。
openGauss=# CREATE ROLE joe IDENTIFIED BY 'xxxxxxxxx';

--创建用户jay。
openGauss=# CREATE ROLE jay IDENTIFIED BY 'xxxxxxxxx';

--创建表空间,且所有者指定为用户joe。
openGauss=# CREATE TABLESPACE ds_location2 OWNER joe RELATIVE LOCATION 'tablespace/tablespace_1';

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

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

编程要求

根据提示,在右侧命令行进行操作,将表空间fastspace重命名为fspace,再将fspace表空间的所有者变更为数据库用户 gaussdb。

 编程实现

三、删除表空间

任务描述

本关任务:基于 openGauss 学习删除表空间的相关知识。

相关知识

为了完成本关任务,你需要掌握:1.openGauss 的常用操作,2.SQL 删除表空间相关语法。

注意事项

只有表空间所有者或者被授予了表空间DROP权限的用户有权限执行DROP TABLESPACE命令,系统管理员默认拥有此权限。
在删除一个表空间之前,表空间里面不能有任何数据库对象,否则会报错。
DROP TABLESPACE不支持回滚,因此,不能出现在事务块内部。
执行DROP TABLESPACE操作时,如果有另外的会话执行\db查询操作,可能会由于tablespace事务的原因导致查询失败,请重新执行\db查询操作。
如果执行DROP TABLESPACE失败,需要再次执行一次DROP TABLESPACE IF EXISTS。

语法格式

DROP TABLESPACE [ IF EXISTS ] tablespace_name;

参数说明

1.IF EXISTS

  如果指定的表空间不存在,则发出一个notice而不是抛出一个错误。

2.tablespace_name

  表空间的名称。

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

示例语句

--创建表空间。

openGauss=# CREATE TABLESPACE ds_location1 RELATIVE LOCATION 'tablespace/tablespace_1';

--创建用户joe。

openGauss=# CREATE ROLE joe IDENTIFIED BY 'xxxxxxxxx';

--创建用户jay。

openGauss=# CREATE ROLE jay IDENTIFIED BY 'xxxxxxxxx';

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

openGauss=# CREATE TABLESPACE ds_location2 OWNER joe RELATIVE LOCATION 'tablespace/tablespace_1';

--把表空间ds_location1重命名为ds_location3。

openGauss=# ALTER TABLESPACE ds_location1 RENAME TO ds_location3;

--改变表空间ds_location2的所有者。

openGauss=# ALTER TABLESPACE ds_location2 OWNER TO jay;
--删除表空间。
openGauss=# DROP TABLESPACE ds_location2;
openGauss=# DROP TABLESPACE ds_location3;
--删除用户。
openGauss=# DROP ROLE joe;
openGauss=# DROP ROLE jay;


编程要求

根据提示,在右侧命令行进行操作,删除表空间 fspace。

编程实现


http://www.kler.cn/a/375872.html

相关文章:

  • C语言——八股文(笔试面试题)——持续更新
  • Centos7中docker安装教程-详细版
  • leetcode hot100【LeetCode 279. 完全平方数】java实现
  • sprintf函数使用指南
  • Linux高阶——1027—
  • C++中关于 <functional> 的使用
  • #渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶之Jenkins组件
  • 使用form表单的action提交并接收后端返回的消息
  • Dolphins 简介——一种新颖的多模态语言模型
  • 第三届北京国际水利科技博览会将于25年3月在国家会议中心召开
  • JAVA开源项目 校园美食分享平台 计算机毕业设计
  • Windows 下实验视频降噪算法 MeshFlow 详细教程
  • python mac vscode 脚本文件的运行
  • 【02基础】- RabbitMQ基础
  • 基于51单片机的无线防盗报警器proteus仿真
  • element-plus校验单个form对象合法性
  • ctfshow(89,90)--PHP特性--intval函数
  • 履带式排爆演习训练机器人技术详解
  • 从0学习React(10)
  • opencv优秀文章集合
  • 【系统架构设计师】2024年上半年真题论文: 论大数据lambda架构(包括解题思路和素材)
  • react的antd-mobile使用Steps显示物流
  • YOLOv6-4.0部分代码阅读笔记-dbb_transforms.py
  • ESP-IDF 配置 SimpleFOC 项目
  • 企业如何通过架构蓝图实现数字化转型
  • Unity 游戏性能优化实践:内存管理与帧率提升技巧