作为服务器升级的一部分,我们将从32位Linux升级到64位Linux (Gentoo,如果有区别的话)和PostgreSQL9.1到9.2。我正在用pg_upgrade升级数据库.
我的第一次尝试是保存旧的(32位9.1) pgsql bin&lib目录,更新系统,然后在更新的(64位)系统上运行:
pg_upgrade -b pgsql.old/bin -B /usr/lib64/postgresql-9.2/bin -d data.old -D data.new这是因为pg_upgrade尝试使用错误的libpq.so.5 (64位系统版本,而不是pgsql.old/lib中的32位版本)运行pgsql.old/bin/pg_ctl。如果我将LD_LIBRARY_PATH设置为指向pgsql.old/lib,那么我可以手动运行旧的32位pg_ctl,但这似乎对pg_upgrade没有帮助。
所以我想我只需要安装64位的PostgreSQL9.1和9.2。现在当我跑:
pg_upgrade -b /usr/lib64/postgresql-9.1/bin -B /usr/lib64/postgresql-9.2/bin -d data.old -D data.new二进制文件运行良好,但升级早期失败,原因如下:
old and new pg_controldata alignments are invalid or do not match我猜是由于数据库中32位对64位对齐问题造成的吗?
我知道pg_dump/pg_restore会工作得很好,但出于速度原因,我想尽可能使用pg_upgrade。这不是一个一蹴而就的交易-我们有几百个系统在实地,将需要更新的自动化方式(通过可引导的拇指驱动器与适当的脚本)。
发布于 2013-09-23 17:11:21
您不能使用pg_upgrade从32位升级到64位,也不能从任何OS/CPU/platform升级到任何其他OS/CPU/平台。数据文件依赖于平台,而pg_upgrade的工作方式是对数据文件进行复制(或链接)。所以这是行不通的。
此时,您的选项是转储/还原,或者使用逻辑复制系统来移动数据(Slony、Londiste、Bucardo)。
发布于 2013-09-20 19:58:33
我绝不会按你的方式去做。为了记录在案,我已经在PostgreSQL工作了,哦,6.x天(也就是很多很多年)。
毫无疑问,我总是这样做:
我使用自定义RC脚本来停止、启动和重新启动postmaster,其中我有指向当前数据和xlog目录的设置。
另外,我知道你在使用某个发行版的包管理器。我避免这种情况,并且总是从源代码构建PostgreSQL。
https://serverfault.com/questions/540592
复制相似问题