目 录
Postgres数据库之增加dm默认表空间main学习汇总
学习参考书籍、网站或博文:
- 参考书籍:《PostgreSQL数据库内核分析》
- PostgreSQL 表空间官方文档,点击前往
背景
近期接触的项目需要在PostgreSQL
数据库上增加dm
默认表空间main
,因此在此做以学习总结。
先来看看dm
数据库上查询的结果:
PostgreSQL
数据库的默认表空间有哪些?
表空间概述
PostgreSQL中的表空间允许数据库管理员在文件系统中定义用来存放表示数据库对象的文件的位置。一旦被创建,表空间就可以在创建数据库对象时通过名称引用。在PostgreSQL中表空间实际上就是给表指定一个存储目录。
表空间的作用
使用表空间,管理员可以控制一个PostgreSQL
安装的磁盘布局。主要有两个用处。
- 如果初始化集簇所在的分区或者卷用光了空间,而又不能在逻辑上扩展或者做别的什么操作,那么表空间可以被创建在一个不同的分区上,直到系统可以被重新配置。
- 表空间允许管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。
表空间和数据库的关系
Oracle
数据库:一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。"一对多"的关系
PostgreSQL
数据库:一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。"多对多"的关系。
系统默认表空间
PostgreSQL
数据库默认表空间有pg_default
和pg_global
,这两个默认表空间在初始化数据库集簇时,会自动创建
pg_default
是template1
和template0
数据库的默认表空间(因此也将是所有其他数据库的默认表空间),用来存储系统目录对象、用户表、用户表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