在Ubuntu系统中恢复PostgreSQL误删数据,核心依赖提前准备的备份文件(SQL/逻辑备份、WAL日志)。以下是具体恢复方法,按优先级排序:
恢复前需确保有以下备份(无备份则需尝试高级恢复,成功率极低):
pg_dump
或pg_dumpall
生成的.sql
/.dump
文件(包含表结构和数据);archive_mode
后生成的WAL(Write-Ahead Logging)文件(位于pg_wal
目录,默认路径为/var/lib/postgresql/<版本>/main/pg_wal
),用于时间点恢复(PITR)。适用于习惯图形操作的用户,步骤如下:
sudo apt-get update && sudo apt-get install pgadmin4
localhost
、端口5432
、用户名postgres
、密码)并连接。.sql
/.dump
格式);适用于习惯终端操作的用户,分为两种格式:
psql
命令直接恢复:sudo -u postgres psql -d 目标数据库名 -f /path/to/backup.sql
pg_restore
命令恢复(支持并行恢复,加-j
参数):sudo -u postgres pg_restore -d 目标数据库名 -U postgres /path/to/backup.dump
注:若备份文件在远程服务器,可通过-h
指定主机(如-h 192.168.1.100
)。若未做逻辑备份,但有完整的基础备份和WAL日志,可实现恢复到误删前的任意时间点(如某条SQL执行时间、某个事务ID)。步骤如下:
sudo systemctl stop postgresql
sudo cp -r /var/lib/postgresql/<版本>/main /var/lib/postgresql/<版本>/main_backup
pgsql.tar
)复制到数据目录,覆盖现有文件:sudo tar -zxvf /path/to/pgsql.tar -C /var/lib/postgresql/<版本>/main/
postgresql.conf
文件(路径如/var/lib/postgresql/<版本>/main/postgresql.conf
),添加以下内容:restore_command = 'cp /path/to/wal_archive/%f %p' # WAL日志归档路径(需与备份时一致)
recovery_target_time = '2025-09-29 10:00:00' # 恢复到的具体时间(根据误删时间调整)
recovery_target_timeline = 'latest' # 恢复到最新时间线(可选)
postgresql.conf
中的hot_standby
设置为on
(可选,用于热备),然后启动服务:sudo systemctl start postgresql
/var/log/postgresql/postgresql-<版本>-main.log
),确认恢复是否完成(日志中会出现“recovery complete”)。sudo -u postgres psql -d 目标数据库名 -c "SELECT * FROM 误删表;"
postgresql.conf
删除或注释恢复参数,重启服务即可。sudo -u postgres
(PostgreSQL默认用户)执行,避免权限不足。以上方法覆盖了Ubuntu上PostgreSQL数据恢复的常见场景,建议根据自身备份情况和误删程度选择合适的方式。若数据极其重要且无备份,可联系专业数据库恢复服务商寻求帮助。