博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostgreSQL数据库管理 第五章表空间管理
阅读量:4171 次
发布时间:2019-05-26

本文共 3367 字,大约阅读时间需要 11 分钟。

PostgreSQL数据库管理 第五章表空间管理

概述

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统(RDBMS)。支持丰富的数据类型(如JSON和JSONB类型,数组类型)和自定义类型。PostgreSQL内存页面的默认大小是8kB。

PostgreSQL的层级结构

  1.逻辑层次关系
    Database Cluster(instance)--》Database--》Schema--》Objects(Table)-->Tuples
  2.物理层次关系
    Database Cluster --》Tablespaces --》Files --》 Blocks

 

 

 

5.1 表空间概念与数据库关系

https://img-blog.csdnimg.cn/20190220143136224.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hvcnNlcw==,size_16,color_FFFFFF,t_70#pic_center

在 PostgreSQL 中,表空间(tablespace)表示数据文件的存放目录,这些数据文件代表了数据库的对象,例如表或索引。当我们访问表时,系统通过它所在的表空间定位到对应数据文件所在的位置。

在PostgreSQL中表空间实际上就是给表或者索引指定一个存储目录。

在Oracle,db2数据库中;一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。属于"一对多"的关系

在PostgreSQL集群中;一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。属于"多对多"的关系。

 

5.2 表空间作用

通过使用表空间,管理员可以控制一个PostgreSQL安装的磁盘布局。这么做至少有两个用处。

1 如果初始化集簇所在的分区或者卷用光了空间,而又不能在逻辑上扩展或者做别的什么操作,那么表空间可以被创建在一个不同的分区上,直到系统可以被重新配置。

2 表空间允许管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。

 

5.3 系统自带表空间

1表空间pg_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录$PADATA/base/

2 表空间pg_global用来存放系统字典表;对应存储目录$PADATA/global/

5.4 表空间查看

postgres=# \db

postgres=# \db+ 详细信息

 

5.4.1  表空间和数据库关系

select oid, datname, datlastsysoid, dattablespace from pg_catalog.pg_database order by 1,2;

postgres=# select oid,* from pg_catalog.pg_tablespace;

5.4.2 表空间和对象的关系

 

5.4.3 查看表的存储路径与大小

查看单表大小

select pg_size_pretty(pg_relation_size('test1'));

查看所有表的大小

SELECT

    table_name,

    pg_size_pretty(table_size) AS table_size,

    pg_size_pretty(indexes_size) AS indexes_size,

    pg_size_pretty(total_size) AS total_size

FROM (

    SELECT

        table_name,

        pg_table_size(table_name) AS table_size,

        pg_indexes_size(table_name) AS indexes_size,

        pg_total_relation_size(table_name) AS total_size

    FROM (

        SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name

        FROM information_schema.tables

    ) AS all_tables

    ORDER BY total_size DESC

) AS pretty_sizes;

查看表的物理存储路径

select pg_relation_filepath('test1');

5.5 创建表空间

目录表空间目录必须是一个已有的空目录,并且属于PostgreSQL操作系统用户

[postgres@Redhat7 ~]$ mkdir /pgdb/jsdb

 

CREATE TABLESPACE tablespace_name [ OWNER { new_owner | CURRENT_USER | SESSION_USER } ] LOCATION 'directory'

atlasdb=# create tablespace jsdb owner postgres location '/pgdb/jsdb';

atlasdb=# create tablespace jkdb owner postgres location '/pgdb/jkdb';

 

 

atlasdb=# CREATE TABLE t2(id int) tablespace jsdb;

insert into t2 valuse (1);

atlasdb=# CREATE TABLE t3(id int) tablespace jkdb;

atlasdb=# insert into t2 values (1);

INSERT 0 1

Time: 0.670 ms

atlasdb=# insert into t3 values (1);

INSERT 0 1

Time: 0.602 ms

5.6 为数据库指定默认表空间

查看数据库默认表空间参照5.4.1

  操作失败不能对修改数据库有连接

atlasdb=# alter database atlasdb set tablespace jsdb;

ERROR:  cannot change the tablespace of the currently open database

Time: 0.239 ms

成功

postgres=# alter database atlasdb set tablespace jsdb;

ERROR:  some relations of database "atlasdb" are already in tablespace "jsdb"

HINT:  You must move them back to the database's default tablespace before using this command.

Time: 101.146 ms

 

错误:数据库“ATLASDB”的一些关系已经在表空间“JSDB”中

提示:在使用此命令之前,必须将它们移回数据库的默认表空间。

 

atlasdb=# ALTER TABLE t2 SET TABLESPACE pg_default;

ALTER TABLE

postgres=# alter database atlasdb set tablespace jsdb;

ALTER DATABASE

 

5.7 移动对象到新表空间

atlasdb=# ALTER TABLE t2 SET TABLESPACE jsdb;

ALTER TABLE

atlasdb=# ALTER TABLE t3 SET TABLESPACE jsdb;

ALTER TABLE

atlasdb=# ALTER TABLE test1 SET TABLESPACE jsdb; 

ALTER TABLE

5.8 删除表空间

 

atlasdb=# DROP TABLESPACE jkdb;

DROP TABLESPACE

atlasdb=# DROP TABLESPACE jsdb;

ERROR:  tablespace "jsdb" is not empty

5.X 疑问

表空间和对象的关系如何查询

 

转载地址:http://fxbai.baihongyu.com/

你可能感兴趣的文章
Redis整合MySQL和MyCAT分库组件(来源是我的新书)
查看>>
Java程序员普遍存在的面试问题以及应对之道(新书第一章节摘录)
查看>>
程序员高效出书避坑和实践指南
查看>>
计算机方面毕业生怎样写简历
查看>>
从软件公司的异同点讲起,聊聊未来的程序员该如何选公司和谋规划
查看>>
我不想安于当前的限度,以达到所谓的幸福,回顾下2020年的我
查看>>
如何在面试中介绍自己的项目经验(面向java改进版)
查看>>
通过写n本书的积累,我似乎找到了写好技术文章的方法(回复送我写的python股票电子书)
查看>>
如果很好说出finalize用法,面试官会认为你很资深
查看>>
分析若干没面试机会和没体现实力的简历
查看>>
用python的matplotlib和numpy库绘制股票K线均线
查看>>
以互联网公司的经验告诉大家,架构师究竟比高级开发厉害在哪?
查看>>
GanttProject 使用的控件第三方包:jdnc-modifBen.jar
查看>>
ps、grep和kill联合使用杀掉进程
查看>>
openfire中的mina框架使用
查看>>
去掉Windows Messager的自动登录
查看>>
dspace可以检索中文了
查看>>
利用Eclipse编辑中文资源,配置文件
查看>>
将中文转为unicode 及转回中文函数
查看>>
《程序员》专访金蝶:是谁不相信国产软件?
查看>>