工具 | pg_recovery 设计原理与源码解读

本文深入探讨 PostgreSQL 的 pg_recovery 工具,解释其数据找回的实现原理,设计思路,包括如何读取 Dead 元组,控制内存及函数参数。并通过源码解读,分析必要的数据、隐藏列、简化代码和元组转换函数等关键部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:张连壮 PostgreSQL 研发工程师

从事多年 PostgreSQL 数据库内核开发,对 citus 有非常深入的研究。

上一期 我们介绍了 PostgreSQL 数据找回工具:pg_reconvery

本文将带大家了解 pg_recovery 工具的实现原理、设计思路,并带来源码解读。

| 数据找回的实现原理

一个数据库系统正常的数据读取方式,是从做 select * from pg_recovery 的查询开始(即执行事务),执行查询操作过程将同时生成事务的快照,通过 GetActiveSnapshot()函数,便可以看到当前可见的数据。

| 设计思路

1. 如何读取 Dead 元组?

PostgreSQL 通过 快照 来决定当前数据库数据的可见性,因此当一条数据被删除时,数据的实体仍然存在于数据库实例中,通常管这种不可见的数据叫做 Dead 元组(PostgreSQL 中一条数据称为一个元组)。

PostgreSQL 中提供了 SnapshotAny 的特殊快照(还有很多其他类型)。这个快照可以读取任何数据,pg_recovery 便是通过该方式读取的所有数据。默认情况下,只返回 recovery 的数据,不返回可见的数据。

</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值