背景:我正在将系统从一台 Ubuntu 主机迁移到另一台主机,同时迁移 Postgresql 数据库。不幸的是,我不再能访问原始服务器,而我要使用的备份文件已损坏。
我一直在尝试在目标服务器上恢复 postgresql 数据库的数据目录(我确实有一个文件系统副本)。但是,每次我通过 init.d 启动 Postgresql 时,都会收到错误消息:
无法确定群集编码
我搜索过这个错误消息,但什么也没找到,而且我对 Postgresql 的了解还不足以准确理解导致该问题的原因。
原始主机是 Ubuntu 8.04,目标主机是 9.10,两者都运行从 ubuntu 默认存储库安装的 Postgresql 8.3。
如果您能提供关于为什么会发生此错误的任何见解,我们将不胜感激。
谢谢,
尼尔
答案1
经过一番思考,我发现问题是由于主机系统是 32 位而目标系统是 64 位。由于 Postgresql 对每个版本的数据目录的编码不同,因此 64 位服务器无法加载 32 位数据目录。
为了解决这个问题,我简单地创建了一个单独的 32 位 Ubuntu 实例并将数据目录复制到其中。服务器启动并运行后,我运行 pg_dumpall 导出数据库并将输出传输回目标机器进行加载。
答案2
我假设所有文件都归数据库超级用户账户所有,并且权限正确吗?
您的 PG_VERSION 文件中有什么?
也许 ls -lR 会有帮助。