我一直在努力将Postgresql数据库从8.4升级到9.1。我遇到过无数问题(可能与Ubuntu的文件放置有关),但我想我看到了终点线。 Pg_upgrade几乎正常工作,但是当它到达第一个数据库'template0'时失败,因为它'已经存在'。
psql:/var/lib/postgresql/pg_upgrade_dump_globals.sql:36: ERROR: database "template0" already exists
There were problems executing "/usr/lib/postgresql/9.1/bin/psql" --set ON_ERROR_STOP=on --no-psqlrc --port 5432 --username "postgres" -f "/var/lib/postgresql/pg_upgrade_dump_globals.sql" --dbname template1 >> "/dev/null"
Failure, exiting
此template0数据库当然是每个新群集的一部分,无法删除。我尝试在新集群上重命名template0和template1(为了安全)(重新创建它之后),但后续的pg_upgrade调用也失败了,但这次抱怨新集群上不存在template1。
"/usr/lib/postgresql/9.1/bin/pg_ctl" -w -l "/dev/null" -D "/var/lib/postgresql/9.1/main" -o "-p 5432 -b" start >> "/dev/null" 2>&1
connection to database failed: FATAL: database "template1" does not exist
unable to connect to new postmaster started with the command: "/usr/lib/postgresql/9.1/bin/pg_ctl" -w -l "/dev/null" -D "/var/lib/postgresql/9.1/main" -o "-p 5432 -b" start >> "/dev/null" 2>&1
Failure, exiting
我再次尝试重命名template0并再次失败,但这次是postgres本身的一些断言问题。
executing: SELECT datcollate, datctype FROM pg_catalog.pg_database WHERE datname = 'template0'
pg_upgrade: /build/buildd/postgresql-9.1-9.1.3/build/../contrib/pg_upgrade/check.c:310: set_locale_and_encoding: Assertion `PQntuples(res) == 1' failed.
Aborted (core dumped)
完整性检查注意事项:如果有人认为'只是做一个完整的sql转储并恢复它'也不能正常工作,这就是我试图让pg_upgrade工作的原因。每次升级失败时,我还确保丢弃并重新创建群集,以防止任何遗留的遗物继续使用升级。该数据库位于Amazon Volume上,因此我无法真正破解任何内容并始终拥有备份。我在ubuntu 12上,并安装了两个数据库。
我目前没有涉及进入postgresql源代码的想法,并且非常感谢有关下一步尝试的任何帮助和建议。提前谢谢。
答案 0 :(得分:6)
停止。喝一杯茶/咖啡,然后坐下。
如果上述任何步骤存在特定问题,您需要记下这些步骤并提供详细信息。哦 - 详细的逐步建议的最佳位置可能是postgresql-general邮件列表(有关详细信息,请参阅网站)。你可以把时间花在那里,让每一步都正确。
猜测你是否正在尝试将pg_upgrade放到现有的initdb-ed目录中,而我认为它并不是我所期望的。在任何情况下,dump + restore都是最干净的方法 - 它也为您提供了数据库的备份副本。