Postgres数据库之增加dm默认表空间main学习汇总

学习参考书籍、网站或博文:

  1. 参考书籍:《PostgreSQL数据库内核分析》
  2. PostgreSQL 表空间官方文档,点击前往

背景

近期接触的项目需要在PostgreSQL数据库上增加dm默认表空间main,因此在此做以学习总结。
先来看看dm数据库上查询的结果:
在这里插入图片描述
PostgreSQL数据库的默认表空间有哪些?
在这里插入图片描述

表空间概述

PostgreSQL中的表空间允许数据库管理员在文件系统中定义用来存放表示数据库对象的文件的位置。一旦被创建,表空间就可以在创建数据库对象时通过名称引用。在PostgreSQL中表空间实际上就是给表指定一个存储目录。

表空间的作用

使用表空间,管理员可以控制一个PostgreSQL安装的磁盘布局。主要有两个用处。

  • 如果初始化集簇所在的分区或者卷用光了空间,而又不能在逻辑上扩展或者做别的什么操作,那么表空间可以被创建在一个不同的分区上,直到系统可以被重新配置。
  • 表空间允许管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。

表空间和数据库的关系

Oracle数据库:一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。"一对多"的关系
PostgreSQL数据库:一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。"多对多"的关系。

系统默认表空间

PostgreSQL数据库默认表空间有pg_defaultpg_global,这两个默认表空间在初始化数据库集簇时,会自动创建

  • pg_defaulttemplate1template0数据库的默认表空间(因此也将是所有其他数据库的默认表空间),用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录$PADATA/base/
  • pg_global 用于存储共享系统目录;对应存储目录$PADATA/global/

除此之外$PGDATA/pg_tblspc目录包含指向集簇中定义的每个非内建表空间的符号连接。初始化数据库集簇之后,该目录是空的,当手动增加表空间时,该目录下会自动生成一个软连接,指向新创建的表空间设定的路径。
例如:
创建一个表空间

postgres=# CREATE TABLESPACE fastspace LOCATION '/home/postgres/study/pg_systab/bin/mytabspace';
CREATE TABLESPACE
postgres=# 
postgres=# select * from pg_tablespace;
  oid  |  spcname   | spcowner | spcacl | spcoptions 
-------+------------+----------+--------+------------
  1663 | pg_default |       10 |        | 
  1664 | pg_global  |       10 |        | 
 16384 | fastspace  |       10 |        | 
(3 rows)

postgres=#
[postgres@local99:~/study/pg_systab/bin/data/pg_tblspc]$ ls
16384
[postgres@local99:~/study/pg_systab/bin/data/pg_tblspc]$ ll 16384
lrwxrwxrwx. 1 postgres postgres 45 May 20 16:04 16384 -> /home/postgres/study/pg_systab/bin/mytabspace
[postgres@local99:~/study/pg_systab/bin/data/pg_tblspc]$ 

几点注意:

  • 这个/home/postgres/study/pg_systab/bin/mytabspace必须是一个已有的空目录,并且属于PostgreSQL操作系统用户。 所有后续在该表空间中创建的对象都将被存放在这个目录下的文件中。该位置不能放在可移动 或者瞬时存储上,因为如果表空间丢失会导致集簇无法工作。
  • 表空间必须由一个数据库超级用户创建,但在创建完之后之后可以允许普通数据库用户来使用它

存储表空间信息的系统表

pg_tablespace存储关于可用表空间的信息。表可以被放置在特定表空间中以实现磁盘布局的管理

  • oid 行标识符
  • spcname 表空间名
  • spcowner 表空间的拥有者,通常是创建它的用户对应的oid( pg_authid.oid
  • spcacl 访问权限
  • spcoptions 表空间级别的选项
postgres=# select * from pg_tablespace;
  oid  |  spcname   | spcowner | spcacl | spcoptions 
-------+------------+----------+--------+------------
  1663 | pg_default |       10 |        | 
  1664 | pg_global  |       10 |        | 
 16384 | fastspace  |       10 |        | 
(3 rows)
postgres=# select * from pg_authid ;
 oid  |          rolname          | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。本课程作为PostgreSQL数据库管理一,主要讲解以下内容: 1.     PostgreSQL 存储过程基本知识2.     PostgreSQL 用户自定义函数3.     PostgreSQL 控制结构4.     PostgreSQL 游标和存储过程5.     PostgreSQL 索引6.     PostgreSQL 视图7.     PostgreSQL 触发器8.     PostgreSQL 角色、备份和还原9.     PostgreSQL 表空间管理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值