首页 > 数据库 >PostgreSQL 怎么通过命令来恢复删除的数据

PostgreSQL 怎么通过命令来恢复删除的数据

时间:2023-06-22 13:03:29浏览次数:49  
标签:PostgreSQL name 删除 命令 pg deid 日志 id testn


最近一段工作较忙,更新的速度可能会减慢,敬请见谅,后期采用隔天更新的方式

误删除数据的情况,一般都是通过备份,或日志来进行恢复,当然ORACLE FLASHBACK的模式实际上也是对一定期限的数据进行数据的恢复。 对于POSTGRESQL 是否可以进行这样的操作,根据POSTGRESQL 的原理来说是可以的。

下面我们就来操作一下瞬间恢复日志的方式

步骤

1  建立一个数据库

2  建立一个表

3  插入数据

4  删除数据

5  数据恢复

这里面我们主要用到的命令为 pg_waldump  pg_resetwal 

pg_waldump 命令就不多说了,前面有详细的一篇提到过,pg_waldump 的使用和日志的分析。

pg_resetwal 命令这边的好好的说一说, pg_resetwal 主要的工作的目的为为了在系统数据损坏的时候,通过pg_resetwal来重新标志日志的位置,让系统可以重启运行并且重置pg_control文件等等。

You are now connected to database "testn" as user "postgres".
testn=# 
testn=# 
testn=# create table deid (id int, name varchar(20));
CREATE TABLE
testn=# insert into deid (id,name) values (1,'t');
INSERT 0 1
testn=# insert into deid (id,name) values (2,'c');
INSERT 0 1
testn=# 
testn=# delete from deid where id =2 ;
DELETE 1
testn=# select * from deid;
 id | name 
----+------
  1 | t
(1 row)

PostgreSQL  怎么通过命令来恢复删除的数据_数据库

postgres=# \c testn
You are now connected to database "testn" as user "postgres".
testn=# 
testn=# 
testn=# create table deid (id int, name varchar(20));
CREATE TABLE
testn=# insert into deid (id,name) values (1,'t');
INSERT 0 1
testn=# insert into deid (id,name) values (2,'c');
INSERT 0 1
testn=# 
testn=# delete from deid where id =2 ;
DELETE 1
testn=# select * from deid;
 id | name 
----+------
  1 | t
(1 row)

上面我们删除了新插入的数据, 下面我们就通过上面的两个命令将数据还原到删除前的状态

1  步 确认当前的日志的以及LSN号

select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());

2  步根据得到当前的事务号以及日志文件,开始寻找恢复日志的数据范围

PostgreSQL  怎么通过命令来恢复删除的数据_java_02

3  在找到大约的 delete 前的位置,可以直接通过  LSN 号定位的方式

pg_waldump 00000002000000010000001F 000000020000000100000025 -s 1/7C030CF8

PostgreSQL  怎么通过命令来恢复删除的数据_java_03

或者通过

pg_waldump 00000002000000010000001F 000000020000000100000025 -r transaction  |  grep  delete 的方式找到准确的删除数据的日志号。

4  在找到并确认事务号的情况下,关闭数据库服务

PostgreSQL  怎么通过命令来恢复删除的数据_java_04

5   通过指定事务号的方式重置数据库

pg_resetwal -x 464902 -D /pgdata/data/

PostgreSQL  怎么通过命令来恢复删除的数据_mysql_05

6  启动数据库并且查看数据是否恢复

PostgreSQL  怎么通过命令来恢复删除的数据_linux_06

经过确认数据已经恢复

但这里需要注意几点 

1  在进行了操作后,设置的LSN 号后的数据都取消了,相当于回滚到指定的事务LSN 号的位置

2  WAL 日志整体被清理,原有的日志(单机)会被归并,原有的日志都没有了。

操作之前的日志

PostgreSQL  怎么通过命令来恢复删除的数据_linux_07

操作后的日志

PostgreSQL  怎么通过命令来恢复删除的数据_mysql_08

标签:PostgreSQL,name,删除,命令,pg,deid,日志,id,testn
From: https://blog.51cto.com/u_14150796/6534685

相关文章

  • POSTGRESQL 15 pg_basebackup 新功能,LOCAL backup 与 数据强力压缩
    与MYSQL不一样,开源XTRABACKUP的备份软件无法跟上MYSQL版本的更迭,PG这点做的是一贯的好。从来没有让人失望过。所以POSTGRESQL数据的备份一直就不是一个问题,众多的工具以及pg_basebackup良好的功能,让POSTGRESQL备份起来速度与硬件有关。但基于POSTGRESQL本身的原理,数据库表......
  • POSTGRESQL 提高POSTGRESQL性能的一些习惯 (1)
    PostgreSQL是一个很有意思的数据库,在使用中有一些习惯可以在同等的硬件下,更加有效的使用硬件提供的资源,让管理和使用POSTGRESQL获得更多的性能。下面就说说一些使用POSTGRESQL的习惯。1 是否需要降低文件的数量POSTGRESQL的文件很多,这里指的文件的数量,主要指两方面的的文件,数......
  • POSTGRESQL VS MYSQL 到底那个数据库 RDS 技术含量高 ?
    以下内容纯属个人看法云数据库的RDS产品,在传统开源的系列里面大致可以选择的是POSTGRESQL和MYSQL两种,诚然在RDS的里面大部分产品最终的选择还是MYSQL,今天不想讨论产品的量,而是想讨论以下产品的难度,RDS产品在POSTGRESQL和MYSQL两种产品的难度问题。先说结果,POSTGRESQL......
  • Postgresql 如何降低 wal 占用磁盘空间,降低磁盘存储成本
    POSTGRESQLWAL的存储一直是一个值得讨论的问题,到底一个POSTGRESQL在极端的情况下,可以用多少的空间来存储WAL日志。这里不是要讨论逻辑复制槽,也不是讨论ARCHIVE,这里要讨论是一种极端的方法,尝试将POSTGRESQLWAL占用的磁盘空间最小化。这里主要针对的对象是,单机的POSTGRESQL,不......
  • POSTGRESQL 存储过程--如何写出新版本PG的存储过程的小案例
    随着问问题的同学越来越多,公众号内部私信回答问题已经很困难了,所以建立了一个群,关于各种数据库的问题都可以,目前主要是POSTGRESQL,MYSQL,MONGODB,POLARDB,REDIS,SQLSERVER等,期待你的加入,最近在开始研究POSTGRESQL的存储过程,主要的原因有以下几个1因为要开发适合目前公司中......
  • POSTGRESQL 提高POSTGRESQL性能的一些习惯 (3)
    随着问问题的同学越来越多,公众号内部私信回答问题已经很困难了,所以建立了一个群,关于各种数据库的问题都可以,目前主要是POSTGRESQL,MYSQL,MONGODB,POLARDB,REDIS,SQLSERVER等,期待你的加入这个系列写到第三期了,实际上POSTGRESQL的优化和一个核心之一,这就是VACUUM,一个弄不清vac......
  • POSTGRESQL 统计信息与数据查询的准确性与多种统计信息类型
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。自己做了一个统计分析有关的,思维导图之前有一期说过,对于一些特殊的查询中的优化,可以在不建立索引和SQL优化的情况下,我们通过统计......
  • POSTGRESQL vacuum_freeze系列中 三个参数与 vacuum的关系
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql ,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。最近在整理VACUUM相关知识的时候,发现一个问题对于vacuum_freeze的3个参数的概念掌握的不牢固,那么只能进行恶补了。本次的三个......
  • MYSQL 删除数据是非多,8.030 还是有死锁
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。我这个人说问题愿意是感性+理性,首先需要感性认知,我们先来看一个下面的问题,在说这个问题之前,我们先将一些问题说明。1数据库版本......
  • PostgreSQL 从熊灿灿一个获取固定字符的SQL 分析巧妙之处
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。某天群里一个同学抛出一个问题,关于获取字段类型中的设置的值,随即熊老师在群里抛出以下的一个SQL (秒抛)SELECTCASEatttypid......