由于我前几天在搭建的 mastodon 实例上手贱取消了和闭社其他站点的互联并重新连接,丢失了所有跨站嘟文和关注者,于是想到 PostgreSQL 作为数据库管理软件是否能做到在无备份的情况下恢复短时间内误删除的数据。
这里使用的是 Debian 11 上的 PostgreSQL 13.16。
pg_resetwal
pg_resetwal
用于在系统数据损坏的时候重新标志日志的位置从而实现回滚。
- pg_resetwal 恢复之后,WAL 日志整体被清理。
- truncate 表删除操作无法进行恢复。
查询当前日志的写入位置
postgres=# select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());
pg_current_wal_lsn | pg_walfile_name | pg_walfile_name_offset
--------------------+--------------------------+------------------------------------
1/5C2B8A18 | 00000001000000010000005C | (00000001000000010000005C,2853400)
(1 row)
其中