PostgreSQL插件—数据恢复工具pg_recovery使用详解

news2024/12/26 21:05:46

说明

pg_recovery 是一款基于PostgreSQL的数据恢复工具。针对表做了 update/delete/rollback/dropcolumn 后的数据恢复。

版本支持

pg_revovery当前支持 PostgreSQL 12/13/14 。

安装

下载插件

墨天轮下载地址:https://www.modb.pro/download/434516

github下载地址:https://github.com/radondb/pg_recovery

安装插件

解压

[postgres@lyp ~]$ ls -rlt pg_recovery-master.zip

-rw-r--r--.1 postgres postgres 13023Feb1520:42 pg_recovery-master.zip

[postgres@lyp ~]$ unzip pg_recovery-master.zip

Archive:  pg_recovery-master.zip

886fc628534b43eb27344aaa07aabcc85f4d0b0e

   creating: pg_recovery-master/

  inflating: pg_recovery-master/.gitignore

  inflating: pg_recovery-master/License  

  inflating: pg_recovery-master/Makefile  

  inflating: pg_recovery-master/README.md

  inflating: pg_recovery-master/README_zh_CN.md

   creating: pg_recovery-master/expected/

  inflating: pg_recovery-master/expected/recovery.out  

  inflating: pg_recovery-master/pg_recovery--1.0.sql

  inflating: pg_recovery-master/pg_recovery.c

  inflating: pg_recovery-master/pg_recovery.control

   creating: pg_recovery-master/sql/

  inflating: pg_recovery-master/sql/recovery.sql

[postgres@lyp ~]$

编译安装

[postgres@lyp ~]$ cd pg_recovery-master/
[postgres@lyp pg_recovery-master]$ make PG_CONFIG=/opt/pgsql14.1/bin/pg_config
gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -I. -I./ -I/opt/pgsql14.1/include/server -I/opt/pgsql14.1/include/internal  -D_GNU_SOURCE   -c -o pg_recovery.o pg_recovery.c
gcc -std=gnu99 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Werror=vla -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fPIC -shared -o pg_recovery.so pg_recovery.o -L/opt/pgsql14.1/lib    -Wl,--as-needed -Wl,-rpath,'/opt/pgsql14.1/lib',--enable-new-dtags  
[postgres@lyp pg_recovery-master]$

创建extension

[postgres@lyp pg_recovery-master]$ psql

psql (14.1)

Type"help"for help.

postgres=# create extension pg_recovery ;

CREATE EXTENSION

postgres=# \dx pg_recovery

List of installed extensions

Name|Version|Schema|Description                             

-------------+---------+--------+---------------------------------------------------------------------

 pg_recovery |1.0|public| recovery table data of update/delete/rollback rows and drop columns

(1 row)

postgres=#

示例

创建测试数据

postgres=# create table lxs(id1 int,id2 int);
CREATE TABLE
postgres=# insert into lxs values (1,11);
INSERT 0 1
postgres=# insert into lxs values (2,22);
INSERT 0 1
postgres=# select * from lxs;
 id1 | id2 
-----+-----
   1 |  11
   2 |  22
(2 rows)
postgres=#

recovery update

模拟update修改数据

postgres=# update lxs set id1 =3,id2=33where id1=1and id2=11;

UPDATE 1

postgres=# update lxs set id1 =4,id2=44where id1=2and id2=22;

UPDATE 1

postgres=#select*from lxs;

 id1 | id2

-----+-----

3|33

4|44

(2 rows)

postgres=#select*from pg_recovery('lxs')as(id1 int,id2 int);

 id1 | id2

-----+-----

1|11

2|22

(2 rows)

postgres=#
postgres=#

recovery delete

模拟delete删除数据

postgres=#deletefrom lxs ;

DELETE 2

postgres=#select*from lxs;

 id1 | id2

-----+-----

(0 rows)

postgres=#select*from pg_recovery('lxs')as(id1 int,id2 int);

 id1 | id2

-----+-----

1|11

2|22

3|33

4|44

(4 rows)

postgres=#

recovery rollback

尝试恢复回滚操作之前的数据。

postgres=#begin;

BEGIN

postgres=*# insert into lxs values(5,55);

INSERT 01

postgres=*# rollback ;

ROLLBACK

postgres=#select*from lxs;

 id1 | id2

-----+-----

(0 rows)

postgres=#select*from pg_recovery('lxs')as(id1 int, id2 int);

 id1 | id2

-----+-----

1|11

2|22

3|33

4|44

5|55

(5 rows)

postgres=#
postgres=#

recovery drop column

模拟删除的列

postgres=# alter table lxs drop column id2;
ALTER TABLE
postgres=# select attnum from pg_attribute a, pg_class where attrelid = pg_class.oid and pg_class.relname='lxs' and attname ~ 'dropped';
 attnum 
--------
      2
(1 row)
postgres=# select * from lxs;
 id1 
-----
(0 rows)
postgres=# select * from pg_recovery('lxs') as (id1 int, dropped_attnum_2 int);
 id1 | dropped_attnum_2 
-----+------------------
   1 |               11
   2 |               22
   3 |               33
   4 |               44
   5 |               55
(5 rows)

postgres=#

dropped_attnum_2: if the drop attnum is 5, set dropped_attnum_2 to dropped_attnum_5

show all data

显示该表历史上所有写入过的数据。

postgres=# insert into lxs values(6);

INSERT 01

postgres=#select*from lxs;

 id1

-----

6

(1 row)

postgres=#select*from pg_recovery('lxs', recoveryrow =>false)as(id1 int, dropped_attnum_2 int, recoveryrow bool);

 id1 | dropped_attnum_2 | recoveryrow

-----+------------------+-------------

1|11| t

2|22| t

3|33| t

4|44| t

5|55| t

6|| f

(6 rows)

postgres=#
postgres=#

注意事项

pg_recovery是通过读取postgresql表中的死元组进行数据恢复。

如果表做了vacuum或者vacuum full操作清理了死元组后,pg_recovery无法对表数据进行恢复。

涉及参数

vacuum_defer_cleanup_age (integer)

postgres=# show vacuum_defer_cleanup_age;
 vacuum_defer_cleanup_age 
--------------------------
 0
(1 row)
postgres=#

指定VACUUM和HOT更新在清除死亡行版本之前,应该推迟多久(以事务数量计)。默认值是零个事务,表示死亡行版本将被尽可能快地清除,即当它们不再对任何打开的事务可见时尽快清除。

这个参数只能在postgresql.conf文件中或在服务器命令行上设置。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吃鸡录屏怎么录到自己的声音 吃鸡录屏怎么隐藏按键

很多人在玩吃鸡游戏时喜欢将自己的游戏过程录制下来,特别是很多游戏主播会录制视频,录制后将视频分享到社交平台。但是在录制时经常会遇到很多问题,如声音、画面清晰度和完整性等。接下来就来分享一下吃鸡录屏怎么录到自己的声音,…

pytorch单机多卡训练

多卡训练的方式 以下内容来自知乎文章:当代研究生应当掌握的并行训练方法(单机多卡) pytorch上使用多卡训练,可以使用的方式包括: nn.DataParalleltorch.nn.parallel.DistributedDataParallel使用Apex加速。Apex 是 N…

嵌入式学习笔记汇总

本文整理STM32、STM8和uCOS-III的所有文章链接。 STM32学习笔记目录 源码:mySTM32-learn STM32学习笔记(1)——LED和蜂鸣器 STM32学习笔记(2)——按键输入实验 STM32学习笔记(3)——时钟系统 …

.NET System.Management 获取windows系统和硬件信息

ManagementObject用于创建WMI类的实例与WINDOWS系统进行交互,通过使用WMI我们可以获取服务器硬件信息、收集服务器性能数据、操作Windows服务,甚至可以远程关机或是重启服务器。 WMI 的全称 Windows Management Instrumentation,即 Windows …

音视频八股文(1)--音视频基础

1.1.音视频录制原理 1.2.音视频播放原理 1.3.图像表示RGB-YUV 1.3.1 图像基础概念 ◼ 像素:像素是一个图片的基本单位,pix是英语单词picture的简写,加上英 语单词“元素element”,就得到了“pixel”,简称px&#xff…

使用Mingw64在CLion中搭建Linux开发环境

1.前言: 博主本来一直是在Visual Studio 2017中使用C语言编写程序,但有个问题是Visual Studio 2017默认使用自带的Windows SDK和编译器,我想使用POSIX文件操作就不行(因为Windows中没有Linux SDK),虽然Wind…

【Kafka-架构及基本原理】Kafka生产者、消费者、Broker原理解析 Kafka原理流程图

【Kafka-架构及基本原理】Kafka生产者、消费者、Broker原理解析 & Kafka原理流程图1)Kafka原理1.1.生产者流程细节1.2.Broker 的存储流程细节1.3.消费者流程细节2)Kafka读写流程图1)Kafka原理 1.1.生产者流程细节 1、生产者发送消息到 …

计算机毕业设计源码整合大全_kaic

以下为具体单个列表(单个下载在我主页搜索即可): 1:计算机专业-ASP(499套) ASP学生公寓管理系统的设计与实现(源代码论文).rar 1:计算机专业-ASP(499套) ASP学科建设设计(源代码论文).ra…

Clickhouse 引擎之MergeTree详解

分区详解 数据存储底层分布 # 数据在这个位置 rootfjj001:~# cd /var/lib/clickhouse/data rootfjj001:/var/lib/clickhouse/data# ls # 数据库 default system rootfjj001:/var/lib/clickhouse/data# cd default/ rootfjj001:/var/lib/clickhouse/data/default# ls #表 enu…

ASEMI代理AD8400ARZ10-REEL原装ADI车规级AD8226ARZ-R7

编辑:ll ASEMI代理AD8400ARZ10-REEL原装ADI车规级AD8226ARZ-R7 型号:AD8400ARZ10-REEL 品牌:ADI/亚德诺 封装:SOIC-8 批号:2023 引脚数量:8 安装类型:表面贴装型 AD8400ARZ10-REEL汽车芯…

Zabbix监控系统——附详细步骤和图解

文章目录一、Zabbix概述1、使用zabbix的原因2、zabbix的概念和构成3、zabbix 监控原理:4、zabbix的程序组件二、安装 zabbix 5.01、部署 zabbix 服务端的操作步骤2、实例操作:部署 zabbix 服务端3、部署 zabbix 客户端4、实例操作:部署 zabbi…

【Linux】揭开套接字编程的神秘面纱(下)

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉前言&…

(二十三)槽函数的书写规则导致槽函数触发2次的问题

在创建QT的信号和槽时,经常无意间保留着QT书写槽函数的习惯,或者在QT设计界面直接右键【转到槽】去创建槽函数,但是后期需要用到disconnect时,又重新写了一遍connect函数,那么你会发现实际槽函数执行了2遍。 首先来看…

要在Ubuntu中查找进程的PID,可以使用pgrep或pidof命令。

一 查找进程 1.pgrep命令 pgrep命令可以根据进程名或其他属性查找进程的PID。例如,要查找名为"firefox"的进程的PID,可以在终端中输入以下命令: pgrep firefox如果有多个名为"firefox"的进程,pgrep命令将返…

互联网一个赛道只剩下几家,真要爆品

互联网一个赛道剩下几家,真要爆品 2017年的书,案例基本上是马后炮总结 趣讲大白话:说起来容易,做起来难 【趣讲信息科技136期】 **************************** 书中讲的范冰冰翻车了 书中不看好的线下渠道,现在成香饽饽…

面试篇-Java并发之CAS:掌握原理、优缺点和应用场景分析,避免竞态问题

1、CAS介绍及原理 多线程中的CAS(Compare-and-Swap)操作是一种常见的并发控制方法,用于实现原子性更新共享变量的值。其核心思想是通过比较内存地址上的值和期望值是否相等来确定是否可以进行更新操作,从而避免多线程条件下的竞态…

HMI实时显示网络摄像机监控画面——以海康威视网络摄像机为例

随着IOT技术的快速发展,网络摄像机快速应用于工业领域,结合其他智能设备建立一个智能系统,提高用户与机器设备之间的交互体验,帮助企业优化人员配置。 作为重要的可视化设备,HMI不仅可以采集现场设备数据,…

uniapp系列-使用uniapp携带收件人信息调用手机邮件应用发邮件的2种方案

背景描述 我们使用uniapp打包之后,某些情况下,需要使用uniapp打开手机其他应用去发邮件,携带对方email 信息以及主题信息等,那我们应该怎么处理呢? 方案一:使用uniapp标签-uni-link,注意这种方…

BGP实验(一)

实验要求: 1、As1存在两个环回,一个地址为192.168.1.0/24,该地址不能在任何协议中宣告, As3存在两个环回,.一个地址为192.168.2.0/24,该地址不能在任何协议中宣告, As1还有一个环回地址为10.1.1.0/24&…

研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理)

研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理)matchother和占位符_区别easy matchenum matchno valuematch innerOption matchmore better wayif-let整洁控制包管理模块(mod)拆分声明modpub公开use展开引用拆解模块结构m…