1.如图
[postgres@iZwz909xeqcc7ouqk8528zZ ~]$ cd $PGDATA [postgres@iZwz909xeqcc7ouqk8528zZ data]$ ls base pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_wal postgresql.conf pоstgres global pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase pg_xact postmaster.opts pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans PG_VERSION postgresql.auto.conf postmaster.pid [postgres@iZwz909xeqcc7ouqk8528zZ data]$ oid2name All databases: Oid Database Name Tablespace -------------------------------------- 13892 postgres pg_default 16412 readme_to_recover pg_default 13891 template0 pg_default 1 template1 pg_default 16416 u1_db pg_default
2.表空间
Postgresql默认有两个表空间:pg_default和pg_global表空间
默认表空间:每个cluster默认情况下有2个表空间,分别命名为pg_default用于存放各个数据库私有的数据库对象,pg_global用于存放cluster全局共享的数据库对象信息,例如:cluster中数据库本身的信息,表空间的信息,数据库订阅信息,数据库复制信息,数据库认证授权信息、控制文件等。
专用表空间:pg_global表空间是专表空间专用的,只能存放全局共享的数据库对象,不能存放用户数据,否则报错
pg_default,表空间,默认存放cluster下所有数据库的所有数据库对象。这一点儿上,倒是有点儿类似于Oracle数据库的专表空间专用 表空间和数据库的关系:一个表空间可以给多个数据库使用,一个数据库里的不同数据库对象也可以存放在不同的表空间下。表空间和数据库的关系,不严格的讲,可以说是多对多的关系。不像Oracle数据库中,一个数据库可以包含多个表空间,且每个表空间只能属于一个数据库使用
如何创建表空间? 1)OS上路径需提前创建,postgres用户得有读写操作系统文件系统权限,数据库管理员权限。-- 不要把表空间目录放在data目录下 -bash-4.2$ psql psql (9.2.24, server 15.3) WARNING: psql version 9.2, server version 15.0. Some psql features might not work. Type "help" for help. postgres=# postgres=# create tablespace newtbs location '/var/lib/pgsql/15/data/tbs_dir'; WARNING: tablespace location should not be inside the data directory CREATE TABLESPACE postgres=#
create database newdb tablespace newtbs; create table test_tbs(id int) tablespace newtbs ;
修改表空间:
数据库创建之后,或者数据库对象(表、index等)创建之后,也可以分别通过alter database/table/index来修改表空间信息。
主要用于逻辑上隔离数据库对象,或者用于数据库存储空间规划或迁移存储。想要通过表空间的设置,进而对于数据库性能提升?作用不大,毕竟现在基本上都是直接上SSD(Solid State Drive )存储给数据库使用。 3.PG在物理上的结构
base --存放默认数据库的目录 global --存放的数据库相关的字典视图或者表文件 pg_commit_ts --事务存放的提交的时间戳数据 pg_dynshmem --动态内存分配存放的空间(dynamic share memeory) pg_hba.conf --基于主机的配置文件 pg_ident.conf --基于对等认证的配置文件 pg_logical --存储数据库内部状态的逻辑解码数据 pg_multixact --存放多事务状态的数据 pg_notify --消息通知目录(LISTEN状态目录) pg_replslot --存放复制槽的数据 pg_serial --提交的可串行化事务的状态数据 pg_snapshots --执行导出快照函数时的状态信息数据 pg_stat --统计信息目录 pg_stat_tmp --临时统计信息目录 pg_subtrans --子事务目录 pg_tblspc --表空间映射目录 pg_twophase --两阶段提交状态的数据 PG_VERSION --存放主版本编号的文件 pg_wal --存储 WAL 文件的目录 pg_xact --事务提交的状态数据 postgresql.auto.conf --存储通过 ALTER SYSTEM 命令修改的参数文件(可以手动修改) postgresql.conf --数据库的参数配置文件 postmaster.opts --上一次数据库启动状态的命令 postmaster.pid --存放当前数据库的主进程编号及相关目录及端口的信息
postgres=# select oid,datname from pg_database; oid | datname -------+------------------- 13892 | postgres 1 | template1 13891 | template0 16412 | readme_to_recover 16416 | u1_db (5 rows)
其中oid是唯一标识的,每一个oid代表一个PG数据库物理存储上的一个目录或者文件。
标签:逻辑,postgres,--,数据库,存放,pg,空间,结构,PG From: https://www.cnblogs.com/zmc60/p/17915039.html