Postgresql 8.4->;9.1 pg#U升级失败,因为数据库';模板0';存在

Postgresql 8.4->;9.1 pg#U升级失败,因为数据库';模板0';存在,postgresql,database-migration,postgresql-9.1,postgresql-8.4,Postgresql,Database Migration,Postgresql 9.1,Postgresql 8.4,我一直在努力将Postgresql数据库从8.4升级到9.1。我遇到了无数的问题(可能与Ubuntu的文件放置有关),但我想我已经看到了终点。 Pg_升级几乎可以正常工作,但当它到达第一个数据库“template0”时失败,因为它“已经存在” psql:/var/lib/postgresql/pg_upgrade_dump_globals.sql:36: ERROR: database "template0" already exists There were problems execut

我一直在努力将Postgresql数据库从8.4升级到9.1。我遇到了无数的问题(可能与Ubuntu的文件放置有关),但我想我已经看到了终点。 Pg_升级几乎可以正常工作,但当它到达第一个数据库“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_升级调用也失败了,但这次抱怨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_升级正常工作的原因。我还确保每次升级失败时都会删除并重新创建集群,以防止过去的任何故障继续影响升级。数据库在Amazon卷上,所以我不能真正破坏任何东西,而且总是有备份。我在Ubuntu12上,两个数据库并排安装


我目前没有任何不涉及postgresql源代码的想法,非常感谢任何关于下一步尝试的帮助和建议。提前谢谢。

停下来。泡杯茶/咖啡,然后坐下

  • 确保同时安装了9.1和8.4。Debian允许这样做,大概ubuntu也允许这样做
  • 使用9.1版本的pg_dump,从8.4中转储每个数据库,或者为用户转储所有数据库,或者手动重新创建它们
  • 使用9.1 pg_restore,将数据库还原为用户postgres以及--create标志
  • 如果这些步骤中有任何一个存在具体问题,您需要记下它们并提供详细信息。哦-详细的分步建议最好的地方可能是postgresql通用邮件列表(有关详细信息,请参阅网站)。你可以慢慢来,把每一步都做好

    我猜您正在尝试将pg_升级到一个现有的initdb-ed目录,我认为这不是它所期望的。在任何情况下,dump+restore都是最干净的方法,它还可以为您提供数据库的备份副本。

    Off topic。你应该要求