PostgreSQL 物理存储结构

磁盘上的各种数据库文件

一、$PGDATA目录介绍

1.1、目录

cd $PGDATA
tree . -L 1 -d

base:包含数据库用户所创建的各个数据库

global:包含集群范围内各个表和视图,pg_database、pg_tablespace

pg_commit_ts:包含已经提交事务的时间

pg_dynshmem:包含动态共享内存

pg_logical:包含逻辑解码的状态数据

pg_multixact:包含多事务状态的数据

pg_notify:包含监听和通知状态数据

pg_replslot:包含复制槽的数据

pg_serial:包含已经提交的序列化事务的有关信息

pg_snapshots:包含导出的快照

pg_stat:统计信息的永久性文件

pg_stat_tmp:统计信息的临时文件

pg_subtrans:包含子事务的状态数据

pg_tblspc:包含表空间的符号连接

pg_twophase:预备事务状态数据信息

pg_wal:WAL:write ahead logging预写日志,类似Oracle Redo Log、MySQL Binlog

pg_xact:事务提交的状态数据

1.2、文件

cd $PGDATA
# 根据实际环境最后再处理一下grep过滤掉不需要的,如:grep -Ev '^68|logfile'
ls -l | grep -v '^d' | awk -F ' ' '{print $NF}' | grep -Ev '^68|logfile'

pg_hba.conf:用于配置客户端的黑白名单

pg_ident.conf:用于配置哪些操作系统用户可以映射成是数据库用户

postgresql.auto.conf:只保存alter system修改参数值

postgresql.conf:参数文件

postmaster.opts:记录服务器最后一次启动时使用的命令参数

postmaster.pid:主进程文件

PG_VERSION:版本信息

二、文件介绍

2.1、数据文件

用于存储数据,文件名以OID命名

对于超出1G的表数据文件,PG会自动将其拆分为多个文件来存储,而拆分的文件名将由pg_class中的relfilenode字段来决定,也就是说PG单个数据文件大小固定为1G

2.2、日志文件

  • 运行日志

默认情况,禁用

各种错误和警告信息、慢查询信息、数据库实例启动和停止,类似Oracle的告警日志

postgresql.conf

# - Where to Log -
log_destination = 'stderr'
logging_collector = off
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
  • 事务日志

默认开启,内容一般不能直接读,是事务提交日志,记录了事务的元数据

默认存储在目录$PGDATA/pg_xact/

  • 服务器日志

logfile

  • 预写日志

WAL - write ahead logging 提前写日志(RDBMS的精髓)

记录的就是客户端提交事务的操作,只要WAL日志写入成功,就算客户端的事务提交成功

目录:pg_wal
日志名字总共设计为24个字符,8个字符为一组
00000001    00000000    00000002
时间线/时间戳    逻辑ID    物理ID
默认:16M
切换WAL日志文件:自动、手动
 

show wal_segment_size;    -- 大小
select * from pg_ls_waldir();  -- 查看信息
select pg_switch_wal();   -- 手动切换wal日志

postgresql.conf 

# wal_level = replica    -- 默认值

# minimal:不能通过基础备份和WAL预写日志来恢复数据库
# replica:支持日志归档和复制
# logical:在replica的基础上,增加逻辑解码的相关信息

转换获取二进制预写日志文件的信息

pg_waldump pg_wal/000000010000000000000003

2.3、控制文件

记录了数据库运行的一些信息,如:数据库id、是否open、wal的位置、checkpoint的位置等等

controlfile是非常重要的文件,玩Oracle的多少都在集群Control File中掉过坑~

默认保存路径:$PGDATA/global/pg_control
查看控制文件的内容

pg_controldata $PGDATA

2.4、参数文件

  • postgresql.conf

PG的主要参数文件,有很详细的说明和注释,和Oracle的pfile、MySQL的my.cnf类似
默认在$PGDATA目录下,有很多参数修改后都需要重启才能生效

从9.6版本以后支持了使用alter system来修改,修改后的会存在$PGDATA/postgresql.auto.conf下,可以reload或者restart来使之生效。

  • postgresql.auto.conf
  • pg_hba.conf

黑白名单的设置文件

TYPE取值有local,host,hostssl,hostnossl四种,其中local是本地认证
DATABASE可以是all,或者指定的数据库
USER可以是all,或者具体的用户
ADDRESS可以是ip或者网段
METHOD取值可以是trust、reject、md5、password、scram-sha-256、
gss、sspi、ident、peer、pam、ldap、radius或者cert

trust是免密登录;

reject是黑名单拒绝;

md5是加密的密码;

password是没有加密的密码;

ident是Linux下PG默认的local认证方式,
凡是能正确登录服务器的操作系统用户(注意不是数据库用户)
就能使用本地用户映射的数据库用户不需要密码验证登录数据库

 

  • pg_ident.conf

用户映射配置文件,用来配置哪些操作系统用户可以映射为数据库用户
结合pg_hba.conf中,method为ident可以用特定的操作系统用户和指定的数据库用户登录数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值