恢复PostgreSQL数据库(32位)中的错误校验和,来自Mac OS X 64位上的备份

当我尝试从新版本的Mac OS X 10.5(32位)保存在我的新版本10.6(64位)下的备份中恢复PostgreSQL数据库时,出现此错误:

# sudo -u postgres /opt/local/lib/postgresql82/bin/postgres -D defaultdb_backup FATAL: incorrect checksum in control file 

这是由于一台服务器运行一个32位版本而另一台运行64位。

我如何恢复我的旧数据?

在相同的架构上安装与以前完全相同的版本的postgres,编译相同的选项,然后你可以恢复。 通过编写wal段和/或复制数据目录进行备份并不是真正的便携式。

正如depesz所说,你将需要编译一个32位版本的Postgres来导入备份。 您应该可以从Postgres网站获得安装程序,并且可以临时运行32位版本,即使在64位安装的OS X上也是如此。

另外,在将来进行备份时,我更喜欢使用pg_dump –clean从数据库中获得完整的转储。 您可以在任何版本的postgres上使用pg_dump –clean文件。

我发现如何恢复我的数据。

postgresql可执行文件是64位的:

 # file /opt/local/lib/postgresql82/bin/postgres /opt/local/lib/postgresql82/bin/postgres: Mach-O 64-bit executable x86_64 

我在我的备份中validationpostgresql可执行文件是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 

有用 !

谢谢你们