PostgreSQL数据delete删除恢复

第一部分 文档描述

本文档适用数据表数据被delete类型的删除语句情况下恢复,需要满足数据库或数据表未被vacuum或者vacuum full

第二部分 操作步骤

2.1 创建测试表
创建测试表novels,并插入测试数据

dbtest=# create table novels (name varchar(200), id int);
CREATE TABLE
dbtest=# insert into novels values('三国演义',1);
INSERT 0 1
dbtest=# insert into novels values('水浒传',2);
INSERT 0 1
dbtest=# insert into novels values('西游记',3);
INSERT 0 1
dbtest=# insert into novels values('红楼梦',4);

2.2 查询表文件位置

查询测试表的文件位置

dbtest=# select oid from pg_database where datname='dbtest';oid  
-------16571
(1 row)dbtest=# select oid,relfilenode from pg_class where relname='novels';oid  | relfilenode 
-------+-------------24783 |       24783
(1 row)

也可以通过函数获取表文件位置

dbtest=# select pg_relation_filepath(' novels ');
pg_relation_filepath 
----------------------base/16571/24783
(1 row)

2.3 模拟删除表数据

拟delete删除测试表的数据

dbtest=# delete from novels;
DELETE 4
dbtest=# select * from novels;name | id 
------+----
(0 rows)

2.4 安装pg_filedump

本操作文档通过pg_filedump插件解析表文件来获取数据,我们通过git下载并安装

[root@VM-4-13-centos ~]# yum install git -y
[postgres@VM-4-13-centos ~]$ cd pg_filedump/
[postgres@VM-4-13-centos pg_filedump]$ make
[postgres@VM-4-13-centos pg_filedump]$ make install
/usr/bin/mkdir -p '/software/pgsql13/bin'
/usr/bin/install -c  pg_filedump '/software/pgsql13/bin'

2.5 解析删除的数据

解析被删除的数据之前首先查询表在删除时间点之后是否被vacuum(包括手动vacuum和autovacuum)

dbtest=# \x
Expanded display is on.
dbtest=# select * from pg_stat_all_tables where relname = 'novels';
-[ RECORD 1 ]-------+------------------------------
relid               | 24783
schemaname          | public
relname             | novels
seq_scan            | 13
seq_tup_read        | 44
idx_scan            | 
idx_tup_fetch       | 
n_tup_ins           | 28
n_tup_upd           | 0
n_tup_del           | 22
n_tup_hot_upd       | 0
n_live_tup          | 6
n_dead_tup          | 18
n_mod_since_analyze | 50
n_ins_since_vacuum  | 24
last_vacuum         | 2022-02-09 11:27:30.501748+08
last_autovacuum     | 
last_analyze        | 
last_autoanalyze    | 
vacuum_count        | 1
autovacuum_count    | 0
analyze_count       | 0
autoanalyze_count   | 0

如果没有被vacuum,则关闭表级别的autovacuum并开始解析步骤

dbtest=# alter table novels set (autovacuum_enabled = off);

通过上述步骤查询到的表数据文件来解析被删除的数据

[postgres@VM-4-13-centos data]$ pg_filedump -D charn,int base/16571/24783*******************************************************************
* PostgreSQL File/Block Formatted Dump Utility
*
* File: base/16571/24783
* Options used: -D charn,int
*******************************************************************Block    0 ********************************************************
<Header> -----Block Offset: 0x00000000         Offsets: Lower      40 (0x0028)Block: Size 8192  Version    4            Upper    8024 (0x1f58)LSN:  logid      0 recoff 0x070351c0      Special  8192 (0x2000)Items:    4                      Free Space: 7984Checksum: 0x0000  Prune XID: 0x00000242  Flags: 0x0000 ()Length (including item array): 40<Data> -----Item   1 -- Length:   44  Offset: 8144 (0x1fd0)  Flags: NORMAL
COPY: 三国演义        1Item   2 -- Length:   40  Offset: 8104 (0x1fa8)  Flags: NORMAL
COPY: 水浒传        2Item   3 -- Length:   40  Offset: 8064 (0x1f80)  Flags: NORMAL
COPY: 西游记        3Item   4 -- Length:   40  Offset: 8024 (0x1f58)  Flags: NORMAL
COPY: 红楼梦        4

可以使用以下命令来过滤需要的数据

[postgres@VM-4-13-centos data]$ pg_filedump -D charn,int base/16571/24783|grep COPY
COPY: 三国演义        1
COPY: 水浒传        2
COPY: 西游记        3
COPY: 红楼梦        4

我们将COPY字段过滤并写入需要的数据到csv文件中

[postgres@VM-4-13-centos data]$ pg_filedump -D varchar,int base/16571/24783|grep COPY|sed 's/\COPY: //g' > import.csv
[postgres@VM-4-13-centos data]$ more import.csv 
三国演义        1
水浒传        2
西游记        3
红楼梦        4

2.6 恢复数据到原表中

使用copy命令导入csv文件中的数据,并验证数据是否恢复

dbtest=# copy novels from '/software/pgsql13/data/import.csv';
dbtest=# select * from novels ;name   | id 
----------+----三国演义 |  1水浒传   |  2西游记   |  3红楼梦   |  4
(4 rows)

hhh6.jpg

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程(二)- Java内置锁的核心原理

前言 Java内置锁是一个互斥锁&#xff0c;这就意味着最多只有一个线程能够获得该锁&#xff0c;当线程B尝试去获得线程A持有的内置锁时&#xff0c;线程B必须等待或者阻塞&#xff0c;直到线程A释放这个锁&#xff0c;如果线程A不释放这个锁&#xff0c;那么线程B将永远等待下…

2024年12月7日Github流行趋势

项目名称&#xff1a;lobe-chat 项目维护者&#xff1a;arvinxx, semantic-release-bot, canisminor1990, lobehubbot, renovate项目介绍&#xff1a;Lobe Chat 是一个开源的现代化设计的人工智能聊天框架。支持多AI提供商&#xff08;OpenAI / Claude 3 / Gemini / Ollama / Q…

群控系统服务端开发模式-应用开发-邮件工厂QQ发送开发

一、邮件发送类实例修改 在Mail目录下修改邮件发送类实例&#xff0c;具体代码如下&#xff1a; <?php /*** 创建邮件发送类实例工厂* User: 龙哥三年风水* Date: 2024/12/5* Time: 14:32*/ namespace Mail; use app\model\param\Emailsms; use Error\BaseError; use Mail…

Golang内存模型总结1(mspan、mcache、mcentral、mheap)

1.内存模型 1.1 操作系统存储模型 从上到下分别是寄存器、高速缓存、内存、磁盘&#xff0c;其中越往上速度越快&#xff0c;空间越小&#xff0c;价格越高。 关键词是多级模型和动态切换 1.2 虚拟内存与物理内存 虚拟内存是一种内存管理技术&#xff0c;允许计算机使用比…

ASP.NET Core8.0学习笔记(二十五)——EF Core Include导航数据加载之预加载与过滤

一、导航属性数据加载 1.在EF Core中可以使用导航属性来加载相关实体。 2.加载实体的三种方式&#xff1a; (1)预先加载&#xff1a;直接在查询主体时就把对应的依赖实体查出来&#xff08;作为初始查询的一部分&#xff09; (2)显式加载&#xff1a;使用代码指示稍后显式的从…

MATLAB Simulink® - 智能分拣系统

系列文章目录 前言 本示例展示了如何在虚幻引擎 环境中对四种不同形状的标准 PVC 管件实施半结构化智能分拣。本示例使用 Universal Robots UR5e cobot 执行垃圾箱拣选任务&#xff0c;从而成功检测并分类物体。cobot 的末端执行器是一个吸力抓手&#xff0c;它使 cobot 能够拾…

环形链表 (简单易懂)

给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;…

【C++】奇偶数判断题的高级分析与优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;1. 题目描述题目背景 &#x1f4af;2. 基本解决思路示例分析 &#x1f4af;3. 原始代码分析代码分析代码优点代码缺点 &#x1f4af;4. 教师代码及其优化分析代码分析代码优…

1.1 Beginner Level学习之“创建 ROS msg 和 srv”(第十节)

学习大纲&#xff1a; 1. msg 和 srv msg 文件是描述 ROS 消息字段的简单文本文件。它们用于为不同语言生成消息的源代码。srv 文件则描述了一个服务&#xff0c;包括两部分&#xff1a;请求和响应。Srv 文件用于生成服务的源代码。msg 文件存储在包的 msg 目录中。srv 文件存…

Linux-笔记---系统文件I/O

1. open函数和close函数 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);#include <unistd.h> int close(int fd); open函数…

红日靶场vulnstark 4靶机的测试报告[细节](一)

目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…

利用 360 安全卫士极速版关闭电脑开机自启动软件教程

在使用电脑的过程中&#xff0c;过多的开机自启动软件会严重拖慢电脑的开机速度&#xff0c;影响我们的使用体验。本教程中简鹿办公将详细介绍如何使用 360 安全卫士极速版关闭电脑开机自启动软件&#xff0c;让您的电脑开机更加迅速流畅。 一、打开 360 安全卫士极速版 在电…

计算机毕业设计Spark股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

本文介绍麒麟信安服务器系统(kylinsec)的安装。

本文介绍麒麟信安服务器系统&#xff08;kylinsec&#xff09;的安装。 下载 在开源欧拉官方找到商业版本的介绍找到相关产品&#xff1a; https://www.openeuler.org/zh/download/commercial-release/ 麒麟信安kylinsec下载地址&#xff1a; https://mirrors.kylinsec.com…

并发专题(10)之FutureTask源码剖析

一、FutureTask介绍 Java创建线程的方式&#xff0c;一般常用的是Thread&#xff0c;Runnable&#xff0c;如果需要处理当前的任务有返回结果的话&#xff0c;需要使用Callable。Callable运行需要配合Future来使用。 Future是一个接口&#xff0c;一般会使用FutureTask实现类去…

ssh远程升级Ubuntu20.04到Ubuntu 22.04

ssh远程升级Ubuntu20.04到Ubuntu 22.04 陈拓 2024/10/16-2024/10/26 1. 简介 本文介绍了如何通过ssh将Ubuntu系统从20.04升级到22.04。 在进行系统升级之前&#xff0c;建议备份重要数据&#xff0c;以防升级过程中出现问题。 2. 更新当前系统 硬件系统架构 当前操作系统版…

新手SEO指南:如何从零开始优化网站实现流量增长

内容概要 在这一部分&#xff0c;我们将简要概述新手在进行SEO优化时需要掌握的一些关键内容。SEO&#xff08;搜索引擎优化&#xff09;是一个复杂而多层次的过程&#xff0c;对网站流量的提升至关重要。无论您是刚刚踏入这一领域的新手&#xff0c;还是希望进一步提升网站性…

FPGA实战篇(呼吸灯实验)

1.呼吸灯简介 呼吸灯采用 PWM 的方式&#xff0c;在固定的频率下&#xff0c;通过调整占空比的方式来控制 LED 灯亮度的变化。 PWM&#xff08;Pulse Width Modulation &#xff09;&#xff0c;即脉冲宽度调制&#xff0c;它利用微处理器输出的 PWM 信号&#xff0c;实现对…

使用 OpenCV 进行 Android 开发

在本节中&#xff0c;我们将创建一个简单的应用程序&#xff0c;它除了加载 OpenCV 之外什么都不做。在下一节中&#xff0c;我们将扩展它以支持相机。 除了这个说明&#xff0c;你还可以使用一些视频指南&#xff0c;例如这个 打开 Android Studio 并选择Empty Views Activi…

项目实例_FashionMNIST_CNN

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…