文库

PostgreSQL找回误删数据

PostgreSQL找回误删数据

八月 19, 2020 阅读 3787 字数 991 喜欢 1

首先PG要先装pg_filedump插件,其原理是虽然数据被删除了,但在数据文件中其仅仅是被标记为删除,而并未被清空;只要在auto vaccum之前都可以通过pg_filedump工具找到。

查询库oid

select oid from pg_database where datname='database';

  oid  

-------

 17420

 

查询表oid

select oid,relfilenode from pg_class where relname='tablename';

  oid  | relfilenode

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

 17421 |       17421

找到对应文件,假如pg的安装路径是/usr/local/pgsql,那么对应文件在/usr/local/pgsql/data/base/oid/oid,根据上面结果路径就是  /usr/local/pgsql/data/base/17420/17421

把文件复制到别的目录下,然后用工具解析该文件(避免vaccum

命令./pg_filedump -D 后面要带上该表每个字段的类型,类型有如下这些:

 bigint bigserial bool char charN date float float4 float8 int

        json macaddr name oid real serial smallint smallserial text

        time timestamp timetz uuid varchar varcharN xid xml

 

如表有字段:id varchar ,name varchar ,sex int

那么要解析该表命令如下:

#./pg_filedump -D varchar,varchar,int /usr/local/pgsql/data/base/17420/17421

 

把数据输出到文本里

#./pg_filedump -D varchar,varchar,int /usr/local/pgsql/data/base/17420/17421 | grep COPY: > /usr/local/pgsql20200819.txt

 

最后就把这些数据重新恢复到数据库中,具体恢复操作这里就不描述了。



    相 关 文 章 返回顶部 下一篇

  • SQL语句找某出字段中Max()值对应的记录

    SQL语句找某出字段中Max()最大值对应的记录

    SQL语句找某出字段中Max()值对应的记录
  • PostgreSQL查询正在执行的语句

    PostgreSQL查询正在执行的语句

    PostgreSQL查询正在执行的语句
  • PG递归查询

    distinct xx和count(distinct xx)的递归优化方法 当数据量大,count(distinct xx)结果会很慢,distinct结果数量较少时,可以使用递归方法优化。distinct结果多不适用。

    PG递归查询
  • postgresql增加连接数

    postgresql修改连接数,可以在postgres.conf里面进行修改max_conection,但是当max_conection过大时,就会报错。此时我把数据库连接数设置到2000,重启后错误信息可以在server.log里看到。这时需要修改系统内核配置。

    postgresql增加连接数
  • PostgreSQL使用正则替换内容

    PostgreSQL使用正则替换内容

    PostgreSQL使用正则替换内容
  • PG shared_buffer性能检测

    很多资料说这个缓存命中率不可低于99%,如果低于了99%,表明,cache效率太低了,需要增大shared buffer。总之了,当你的shared buffer命中率太低,比如60%,基本就需要检查下你配置的shared buffers是否太小了,导致你cache利用率如此之低。

    PG shared_buffer性能检测

粤ICP备18103437号