如何升级 postgresl 数据库?不兼容错误

如何升级 postgresl 数据库?不兼容错误

我通过 Homebrew 安装了 postgresql。

升级后我遇到以下问题:

FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 9.0, which is not compatible with this version 9.1.2.

关于如何升级有什么提示吗?我尝试了以下方法:

$ pg_upgrade -d /usr/local/var/postgres/ -D /usr/local/var/postgres -b 
/usr/local/Cellar/postgresql/9.0.4/bin -B /usr/local/Cellar/postgresql/9.1.2/bin

它不起作用。这是输出。

Performing Consistency Checks
Checking current, bin, and data directories                 ok
Checking cluster versions                                   
This utility can only upgrade to PostgreSQL version 9.1.
Failure, exiting

错误。

答案1

对于我在 OS X 上使用 Homebrew 的情况就是这样。

  1. 使用 Homebrew 安装了新的 postgres(开始出现错误)
  2. mv /usr/local/var/postgres /usr/local/var/postgres.old
  3. initdb -D /usr/local/var/postgres
  4. pg_upgrade -b /usr/local/Cellar/postgresql/9.0.4/bin -B /usr/local/Cellar/postgresql/9.1.2/bin -d /usr/local/var/postgres.old -D /usr/local/var/postgres
  5. ./delete_old_cluster.sh(当您完成上述步骤时,该脚本会在当前目录中自动为您创建)
  6. rm delete_old_cluster.sh

答案2

如果你使用的是 macOS 并通过 Homebrew 安装了 Postgres,那么你可以简单地运行:

brew postgresql-upgrade-database

这将确保安装旧版本的 Postgres,创建一个新的数据库,然后通过 进行迁移pg_upgrade。旧数据将保留在 中/usr/local/var/postgres.old

答案3

以下是我在 Fedora 上操作的方法:

  • 将旧数据目录重命名为 data.old 之类的名称
  • 运行postgresql-setup initdb此命令将创建新的数据目录
  • 然后运行pg_upgrade -b /usr/lib64/pgsql/postgresql-9.0/bin/ -B /usr/bin/ -d data.old/ -D data

我认为对你来说应该是:

pg_upgrade -b /usr/local/Cellar/postgresql/9.0.4/bin -B /usr/bin/ -d /usr/local/var/postgres.old/ -D /usr/local/var/postgres/
  • 您还需要将 pg_hba.conf 和 postgresql.conf 从 data.old 复制到新的数据目录。
  • 重启postgresql

答案4

为了Arch Linux,有一个wiki 中的解决方案对我来说效果很好:

pacman -S --needed postgresql-old-upgrade
su -
su - postgres -c 'mv /var/lib/postgres/data /var/lib/postgres/data-9.2'
su - postgres -c 'mkdir /var/lib/postgres/data'
su - postgres -c 'initdb --locale en_US.UTF-8 -E UTF8 -D /var/lib/postgres/data'
su - postgres -c 'pg_upgrade -b /opt/pgsql-9.2/bin/ -B /usr/bin/ -d /var/lib/postgres/data-9.2 -D /var/lib/postgres/data'

相关内容