pg_control

包含服务器内部状态信息的的文件

pg_control是一个8kb的二进制文件,存储有关PostgreSQL服务器内部状态各个方面的信息,例如最近的检查点,以及由initdb设置的基本参数。它位于集群的global/目录中。

pg_control是在PostgreSQL 7.1中添加的(提交4d14fe00)。

可以使用客户端实用程序pg_controldata(以及带有-n/--dry-run选项的pg_resetwal)显示pg_control文件的内容。从PostgreSQL 9.6开始,还可以使用以下SQL函数从文件中提取信息

源代码

pg_control文件的文件名由src/include/access/xlog_internal.h中的XLOG_CONTROL_FILE定义。

pg_control文件的结构由结构体ControlFileData定义,该结构体包含在头文件src/include/catalog/pg_control.h中,即使它不是堆关系。

pg_control文件的大小由PG_CONTROL_FILE_SIZE定义(也在src/include/catalog/pg_control.h中;PostgreSQL 9.6及更早版本:PG_CONTROL_SIZE),目前为8192字节。但是,实际内容(由结构体ControlFileData定义)旨在占用不超过512字节,以适合典型的磁盘驱动器扇区;请参阅src/include/catalog/pg_control.h中的注释。该文件用零填充,以减少过早文件结束错误的可能性(请参阅src/backend/access/transam/xlog.c中函数WriteControlFile()的注释)。

格式更改

pg_control文件的格式可能会在不同版本之间发生变化。以下是自PostgreSQL 9.4以来对ControlFileDataCheckPoint结构体的更改列表。

PostgreSQL 12

添加以下字段

  • int max_wal_senders;(提交ea92368c

删除以下字段

  • uint32 nextXidEpoch; /* nextXid的高位字节 */
  • TransactionId nextXid; /* 下一个空闲XID */

并替换为

  • FullTransactionId nextFullXid; /* 下一个空闲的完整事务ID */

(提交2fc7af5e

PostgreSQL 11

删除以下字段

  • XLogRecPtr prevCheckPoint;(提交4b0d28de

PostgreSQL 10

添加以下字段

  • char mock_authentication_nonce[MOCK_AUTH_NONCE_LEN];(提交818fd4a6

PostgreSQL 9.5

添加以下字段

  • bool track_commit_timestamp;

此外,CheckPoint结构体添加了以下字段

  • TransactionId oldestCommitTsXid; /* 具有有效提交时间戳的最旧Xid */
  • TransactionId newestCommitTsXid; /* 具有有效提交时间戳的最新Xid */

(所有更改都在提交73c986ad中;请注意,PG_CONTROL_VERSION直到99dd8b05才更新)

PostgreSQL 9.4

添加以下字段

  • int max_worker_processes;(提交6bc8ef0b

恢复pg_control

pg_control损坏的极不可能的情况下,可能可以使用pg_resetwal(PostgreSQL 9.6及更早版本:pg_resetxlog)恢复它。

分类

PostgreSQL内部机制

参见

pg_controldata

反馈

提交任何关于"pg_control"的评论、建议或更正 此处