作者:张连壮 PostgreSQL 研发工程师
从事多年 PostgreSQL 数据库内核开发,对 citus 有非常深入的研究。
快速找回丢失数据,是数据库的一项重要功能需求,一般建议使用官方推荐的工具。面向开源数据库,生态中也出现很多好用的开源工具。
PostgreSQL 是非常流行的开源数据库,接下来介绍一款近期在社区开源的 PostgreSQL 数据找回工具 pg_recovery ,并实例演示如何找回误操作而丢失的数据。
| 什么是 pg_recovery?
pg_recovery 是一款 PostgreSQL 数据找回工具。可以恢复 COMMIT / DELETE / UPDATE / ROLLBACK / DROP COLUMN 操作后导致的数据变化,并以表的形式返回。安装方便,操作简单。仓库地址:github.com/radondb/pg_…
快速安装
根据环境配置 PG_CONFIG。
1 | bash复制代码$ make PG_CONFIG=/home/lzzhang/PG/postgresql/base/bin/pg_config |
初始化插件成功,返回如下信息。
1 | sql复制代码$ create extension pg_recovery ; |
| 数据找回演示
- 准备初始化数据
准备一个表和一些数据。
1 | sql复制代码$ create table lzzhang(id int, dp int); |
- 找回 UPDATE 数据
对数据进行变更操作,不加 WHERE 条件。
1 | sql复制代码$ update lzzhang set id=3, dp=3; |
- 找回 DELETE 数据
尝试恢复 DELETE 的数据。
1 | sql复制代码$ delete from lzzhang; |
- 找回 ROLLBACK 数据
尝试恢复回滚操作之前的数据。
1 | sql复制代码$ begin ; |
- 找回 DROP COLUMN 数据
尝试恢复表中被删除的列及数据。
1 | sql复制代码$ alter table lzzhang drop column dp; |
- 显示找回数据
显示该表历史上所有写入过的数据。
1 | sql复制代码$ insert into lzzhang values(5); |
注意事项
目前 pg_revovery工具已支持 PostgreSQL 12/13/14 。
PostgreSQL 通过参数 vacuum_defer_cleanup_age
值大小,可限制可恢复的事务数。如果预期需要恢复的数据量较大,可通过配置参数值,提高可恢复的事务数。
pg_recovery 通过读取 PostgreSQL dead 元组来恢复不可见的表数据。如果元组被 vacuum 清除掉,那么 pg_recovery 便不能恢复数据。
pg_recovery 使用期间,支持正常的读表的锁请求。此外 pg_recovery未使用期间,不会对数据库造成任何额外的开销或是影响,无需暂停服务。
本文转载自: 掘金