![如何升级 postgresl 数据库?不兼容错误](https://linux22.com/image/570566/%E5%A6%82%E4%BD%95%E5%8D%87%E7%BA%A7%20postgresl%20%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%9F%E4%B8%8D%E5%85%BC%E5%AE%B9%E9%94%99%E8%AF%AF.png)
我通过 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 的情况就是这样。
- 使用 Homebrew 安装了新的 postgres(开始出现错误)
mv /usr/local/var/postgres /usr/local/var/postgres.old
initdb -D /usr/local/var/postgres
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
./delete_old_cluster.sh
(当您完成上述步骤时,该脚本会在当前目录中自动为您创建)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'