首先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
最后就把这些数据重新恢复到数据库中,具体恢复操作这里就不描述了。
测试测试测试测试测试测试测试测试测试测试测试测试测试测试
48448
测试