gpt4 book ai didi

Postgresql 8.4->9.1,pg_upgrade 失败,因为数据库 'template0' 存在

转载 作者:行者123 更新时间:2023-11-29 11:55:47 24 4
gpt4 key购买 nike

我一直致力于将 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 源代码的想法,非常感谢任何关于下一步尝试的帮助和建议。提前致谢。

最佳答案

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

  1. 确保同时安装了 9.1 和 8.4。 Debian 允许这样做,所以想必 ubuntu 也这样做。
  2. 使用 9.1 版本的 pg_dump,从 8.4 转储您的每个数据库,并为用户转储或手动重新创建它们。
  3. 使用 9.1 pg_restore,将您的数据库恢复为用户 postgres 以及 --create 标志。

如果这些步骤中的任何一个有具体问题,您需要记录下来并提供详细信息。哦 - 详细的逐步建议的最佳位置可能是 postgresql-general 邮件列表(有关详细信息,请参见网站)。您可以在那里慢慢来,并正确完成每一步。

我猜你正试图将 pg_upgrade 执行到一个现有的 initdb-ed 目录中,我认为这不是它所期望的。无论如何,dump+restore 是最简洁的方法 - 它还为您提供了数据库的备份副本。

关于Postgresql 8.4->9.1,pg_upgrade 失败,因为数据库 'template0' 存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com