文章目录
任务九 openGauss逻辑结构:表空间管理
任务目标
表空间是数据的容器。通过本任务,读者应能掌握表空间的管理,包括创建表空间、删除表空间、重命名表空间、查看表空间的情况。
实施步骤
一、创建表空间
使用用户omm打开一个Linux终端窗口,执行如下的命令,登录到openGauss数据库,并创建一个名为ustb_ts的表空间:
gsql -d postgres -p 26000 -r
CREATE TABLESPACE ustb_ts RELATIVE LOCATION 'tablespace/ustb_ts1';
二、查看系统有哪些表空间
执行下面的SOL语句和gsql元命令\db,查看openGauss数据库下有什么表空间:
SELECT spcname FROM pg_tablespace;
\db
三、查看表空间目前的大小
执行下面的SQL语句,查看表空间的大小(单位是字节,例子是新建的表空间,只有6个字节大小):
SELECT PG_TABLESPACE_SIZE('ustb_ts');
\q
有了表空间目前大小的数据,可以计算表空间的使用率:表空间的使用率=表空间的大小/表空间所在磁盘分区的大小×100%
四、查看某个表空间下有哪些对象
1.查看数据库的默认表空间下有哪些对象
使用Linux用户omm,打开一个Linux终端窗口,执行如下命令和SOL语句,用数据库用户
student连接openGauss DBMS的数据库studentdb:
gsql-d studentdb-h 192.168.100.91-U student-p26000-W student@ustb2020-r
执行下面的SQL语句,查看数据库studentdb的默认表空间下有哪些对象:
with objectInDefaultTS as
( select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),
reltablespace,relowner
from pg_class a
where a.relkind in ('r', 'i') and reltablespace='0'
)
select *
from objectInDefaultTS
-- where 子句中过滤条件是:结果记录不是以pg_%开头,或者不是以gs_开头
-- 设p表示结果记录以pg_%开头;q表示结果记录以gs_开头,
-- 使用德摩根定律 not(p or q)⇔(not p) and (not q)进行等价转换
-- where子句中的过滤条件改写为:结果记录既不是以pg_%开头,并且也不是以gs_开头
where relname not like 'pg_%' and relname not like 'gs_%' and relname not like 'sql_%'
order by relpages desc;
2.查看数据库的非默认表空间下有哪些对象
由于当前数据库studentdb的默认表空间是student_ts,为了进行测试,首先在表空间ustb_ts
中为数据库studentdb创建一个测试表ttt:
create table tt(coll varchar(10))tablespace ustb ts
执行下面的SOL语句,查询数据库studentdb的非默认表空间ustb_ts下有哪些对象:
create table ttt(col1 varchar(10)) tablespace ustb_ts;
select relname,relkind,relpages,pg_size_pretty(pg_relation_size(a.oid)),
reltablespace,relowner
from pg_class a, pg_tablespace tb
where a.relkind in ('r', 'i')
and a.reltablespace=tb.oid
and tb.spcname='ustb_ts'
order by a.relpages desc;
执行下面的SQL语句,删除测试表ttt,并退出gsql会话:
drop table ttt;
\q
五、重命名表空间
使用用户omm打开一个Linux终端窗口,执行如下的命令,登录到openGauss数据库,将表
空间ustb_ts命名为app_ts:
gsql -d postgres -p 26000 -r
ALTER TABLESPACE ustb_ts RENAME TO app_ts;
执行下面的gsql命令,查看数据库当前的表空间信息:
\db
六、删除表空间
用户必须是表空间的Owner或者系统管理员才能删除表空间。执行下面的SQL语句,删除表
空间app_ts:
DROP TABLESPACE app_ts;
执行下面的gsql命令,再次查看数据库当前的表空间信息,并退出gsql:
\db
\q