作者:太阳
四、物理结构
4.1 软件安装目录
bin             //二进制可执行文件
include         //头文件目录
lib             //动态库文件
share           //文档以及配置模版文件
4.2 数据目录

4.2.1 参数文件
pg_hba.conf               //认证配置文件
pg_ident.conf             //认证方式用户映射文件
postgresql.auto.conf      //alter system动态修改配置文件
postgresql.conf           //主配置文件
postmaster.opts
postmaster.pid            //pid
1、pg_hba.conf
pg_hba.conf文件为pg的认证配置文件,无论是我们用户登录还是主从复制,都需要在该文件下填写相关的认证配置,保证可正常联通数据库。
pg_hba.conf主要由5个参数组成:Type(主机类型)、Database(数据库名)、User(用户名)、Address(IP地址和掩码)、 Method(加密方法)
Type : 指定允许的连接方式
"local"表示使用 Unix-domain socket 进行连接;
“host” 表示可以使用 ssl或者非ssl加密的 TCP/IP socket 进行连接;
“hostssl” 表示必须通过ssl加密的 TCP/IP socket 进行连接;
“hostnossl” 表示通过使用非ssl的 TCP/IP socket 进行连接。
Database : 指定允许访问数据库信息
可以为 “all”, “sameuser”, “samerole”, “replication”,或者业务数据库名称。“all"并不包括"replication”,若需要方通replication需要单独编写放通规则;
多个数据库使用逗号分隔
User : 指定允许用户
表示认证配置的数据库用户信息,可以为"all"也可以指定某个数据库用户,多个用户授权可使用逗号分隔;
可引用外部文件中配置信息信息认证配置,@${filename}
Address : 指定允许主机IP信息
表示认证配置的主机IP信息,可以是一个主机名,也可以是IP+掩码;0.0.0.0/0表示所有主机
Method : 指定认证策略
表示认证策略,可以设置为"trust", “reject”, “md5”, “password”, “scram-sha-256”, “gss”, “sspi”, “ident”, “peer”, “pam”, “ldap”, “radius” or “cert”;
password表示以明文方式发送密码;
2、postgres.conf
配置参数类别
| 参数类型 | 参数类型 | 
|---|---|
| internal | 内部参数,只读无法修改。postgres程序写死或者是在初始化指定后无法修改的参数 | 
| postmaster | 修改该类参数需要重启数据库 | 
| sighup | 不需要重启数据库,重新加载配置文件即可对所有的进程生效 | 
| backup | 不需要重启数据库,重新加载配置文件后,新的链接可以应用修改后的参数,已存在链接不生效 | 
| superuser | 必须通过超级用户进行修改 | 
| user | 普通用户可进行修改 | 
PG数据库所有的参数都在pg_settings表中,具体参数对应什么类别可通过该表进行查询。
连接相关参数
| 参数 | 含义 | 
|---|---|
| listen_addresses | v | 
| port | 服务器监听TCP端口,默认5432 | 
| max_connections | server端允许最大连接数,默认100 | 
| superuser_reserved_connections | Server端为超级账号保留的连接数,默认3 | 
| unix_socket_directory | |
| Server监听客户端Unix嵌套字目录,默认/tmp | |
内存相关参数
| 参数 | 含义 | 
|---|---|
| shared_buffer | 共享内存缓存区大小,默认128MB | 
| temp_buffers | 每个会话使用的临时缓存区大小,默认8MB | 
| work_mem | 内存临时表排序操作或者hash需要使用到的内存缓存大小,默认4MB | 
| maintenance_work_mem | 对于维护性操作(vacuum、create index)最大使用内存,默认64M,最小1M。 | 
| max_stack_depth | Server端执行堆栈最大安全深度,默认2M,若发现无法执行复杂函数时可适当调整该参数 | 
wal相关参数
| 参数 | 含义 | 
|---|---|
| wal_level | minimal, replica, or logical | 
| fsync | 是否使用fsync()将内存中的脏页刷新到物理磁盘,默认为ON | 
| synchronous_commit | 事务提交是否需要等待对应的wal日志刷盘,默认为ON | 
| wal_sync_method | wal日志刷盘方式 | 
| full_page_write | 在checkpoint之后将第一次发生修改的页面写入到wal日志中,保证数据库奔溃恢复可以wal日志中该保存页面以及wal日志 | 
| wal_buffer | wal缓存的大小,默认为-1 | 
错误日志相关参数
| 参数 | 含义 | 
|---|---|
| logging_collector | 是否打开日志 | 
| log_rotation_age | |
| 超过多少天生产一个新的日志文件 | |
| log_rotation_size | 超过多少大小生成一个新的日志文件 | 
| log_destination | 日志目录 | 
| log_filename | 日志文件名 | 
| log_truncate_on_rotation | 当日志名已存在时,是否覆盖原文件 | 
4.2.2 日志文件
pg_xact                             //事务提交日志,记录事务提交状态的子目录
postgresql-2020-09-10_154100.log    //运行日志,打印一些error信息
pg_wal                              //重做日志,wal预写日志文件的子目录
4.2.3 其他一些目录文件
## $PGDATA下
base                      //默认表空间目录
global                    //共享系统表目录
pg_commit_ts              //记录事务提交时间的子目录
pg_dynshmem               //记录使用共享内存文件的子目录
pg_logical                //包含用于逻辑复制的状态数据的子目录
pg_multixact              //包含多事务(multi-transaction)状态数据的子目录(用于共享的行锁)
pg_notify                 //包含LISTEN/NOTIFY状态数据的子目录
pg_replslot               //包含复制槽数据的子目录
pg_serial                 //包含已提交的可序列化事务信息的子目录
pg_snapshots              //包含导出的快照的子目录
pg_stat                   //包含用于统计子系统的永久文件的子目
pg_stat_tmp               //包含用于统计信息子系统的临时文件的子目录
pg_subtrans               //记录事务状态数据的子目录
pg_tblspc                 //指向表空间的符号连接
pg_twophase               //记录分布式事务状态的子目录
PG_VERSION                //记录PG版本
## 单独的表空间目录下
tbs01                     //表空间目录
4.2.4 关于表空间

 在PG数据库中,对于默认使用pg_default表空间的所有数据,都默认存储在$PGDATA下base目录下,对于独立划分出来的表空间,除表空间指定的location外,还需要在$PGDATA下的pg_tblspc进行记录,并利用软连接连接至对应的表空间目录。
所有数据库对象都有各自的oid(object identifiers),oid是一个无符号的四字节整数,相关对象的oid都存放在相关的system catalog表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中。
## 表空间目录 
/data/pgsql12/tbs01/PG_12_201909212/17096
PG_12 表示数据库版本
201909212 表示 Catalog 版本
16391 表示 该表空间下数据库的oid## 查看数据库Catalog信息
$ pg_controldata
pg_control version number:            1201
Catalog version number:               201909212
Database system identifier:           6870373621203487994
Database cluster state:               in production
pg_control last modified:             Thu 10 Sep 2020 09:28:48 PM CST## 查看数据库oid
postgres=# select oid,datname from pg_database;oid  |  datname
-------+-----------13547 | postgres16384 | db11 | template113546 | template017096 | db2                //可以看到表空间tbs01其实是被db2使用的
(5 rows)
更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw