为啥Point-in-Time Recovery (PITR)的postgresql文档中没有提到pg_clog?

Posted

技术标签:

【中文标题】为啥Point-in-Time Recovery (PITR)的postgresql文档中没有提到pg_clog?【英文标题】:Why is pg_clog not mentioned in the postgresql document of Point-in-Time Recovery (PITR)?为什么Point-in-Time Recovery (PITR)的postgresql文档中没有提到pg_clog? 【发布时间】:2018-01-29 07:18:43 【问题描述】:

首先,请原谅我的英语不好。

postgresql 9.x 文档的“Continuous Archiving and Point-in-Time Recovery (PITR)”一章中没有提到关键字“pg_clog”。但正如我从数据库系统实现一书中了解到的,提交日志是数据库从故障或备份中恢复的必要条件,因为它们有助于数据库恢复到一致性。

是不是因为提交记录也写在了其他文件中?例如,WAL?

谢谢。

【问题讨论】:

【参考方案1】:

提交日志包含特定事务是否已提交或回滚的信息。

当向表中写入行时,尚不清楚事务是否会成功。而不是在事务提交或恢复时将该信息存储在每个行版本(“元组”)中,PostgreSQL 仅在提交日志中标记事务的状态。

所以需要有commit log来判断某个tuple是否可见;没有它,数据库将无法使用。

恢复文档中没有特别提到提交日志,因为它是数据目录的一部分,并在检查点时写入磁盘。

对于恢复,没有必要在您恢复的检查点之外有提交日志信息:因为COMMITROLLBACK 记录在事务日志(“WAL”)中,所有信息都在那里并将在恢复期间写入提交日志。

【讨论】:

有趣。如果事务日志中提供了相同的信息,那么为什么需要提交日志?这是一种性能优化,因为搜索 WAL 档案的效率会降低吗? 当然,从 WAL 中提取这些信息是非常低效的。但这也是不可能的,因为一旦 WAL 文件被归档和回收,服务器就不再可以使用它们了。

以上是关于为啥Point-in-Time Recovery (PITR)的postgresql文档中没有提到pg_clog?的主要内容,如果未能解决你的问题,请参考以下文章

MOS文章分类整理

为啥红米1S联通版修改install-recovery.sh的权限为全部可执行,重启后又恢复原来

为啥OPPO R820刷机时提示签证鉴权失败

求解,我手机为啥关机充电然后自动开机就充不了电了

Recovery.img是啥 怎么刷入recovery

recovery模式是啥意思 如何进入recovery