当我尝试从我的新版本 10.6(64 位)上的旧版本 Mac Os X 10.5(32 位)下保存的备份中恢复 PostgreSQL 数据库时,出现此错误:
# sudo -u postgres /opt/local/lib/postgresql82/bin/postgres -D defaultdb_backup
FATAL: incorrect checksum in control file
这是因为一台服务器运行 32 位版本,另一台服务器运行 64 位版本。
我如何恢复我的旧数据?
答案1
在某处安装与以前完全相同版本的 postgres,在相同的架构上,用相同的选项进行编译,然后就可以恢复。通过写入 wal 段和/或复制数据目录来进行备份实际上并不是可移植的。
答案2
正如 depesz 所说,您需要编译 32 位版本的 Postgres 才能导入备份。您应该能够从 Postgres 网站获取安装程序并临时运行 32 位版本,即使在 64 位 OS X 上也是如此。
另外,以后做备份时我更喜欢使用 pg_dump --clean 从数据库获取完整转储。您可以在任何版本的 postgres 上使用 pg_dump --clean 文件。
答案3
我找到了如何恢复我的数据的方法。
postgresql 可执行文件是 64 位的:
# file /opt/local/lib/postgresql82/bin/postgres
/opt/local/lib/postgresql82/bin/postgres: Mach-O 64-bit executable x86_64
我验证备份中的 postgresql 可执行文件是 32 位的:
# file /Volumes/Backup/Backups.backupdb/MyMacBook/2009-09-23-004611/Macintosh\ HD/opt/local/lib/postgresql82/bin/postgres
/Volumes/Backup/Backups.backupdb/MyMacBook/2009-09-23-004611/Macintosh HD/opt/local/lib/postgresql82/bin/postgres: Mach-O executable i386
我将其复制到我的系统上:
# sudo cp /Volumes/Backup/Backups.backupdb/MyMacBook/2009-09-23-004611/Macintosh\ HD/opt/local/lib/postgresql82/bin/postgres /opt/local/lib/postgresql82/bin/postgres_32
现在我这样做:
# sudo -u postgres /opt/local/lib/postgresql82/bin/postgres_32 -D defaultdb_backup
有用 !
谢谢你们