从 Mac Os X 64 位上的备份恢复 PostgreSQL 数据库(32 位)时校验和不正确

从 Mac Os X 64 位上的备份恢复 PostgreSQL 数据库(32 位)时校验和不正确

当我尝试从我的新版本 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

有用 !

谢谢你们

相关内容