当我需要安装两个 PostgreSQL 服务器时,如何使用 pg_dump 解决“服务器版本不匹配”?

Lui*_*lli 19 postgresql

我在我的电脑上安装了两台 PostgreSQL 服务器。一个是 9.1,另一个是 9.3。我需要安装两台服务器。

但是,当我运行 pg_dump 时,出现版本不匹配错误:

server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch
Run Code Online (Sandbox Code Playgroud)

我该如何解决?(无法卸载任一版本 - 我先安装了 9.1,几个月后又安装了 9.3 - 我需要安装两个数据库服务器)。

Dan*_*ité 17

TL;DR : 如果两个 PostgreSQL 实例都由 Ubuntu 包管理(应该如此),只需使用--cluster选项选择要备份的 PostgreSQL 实例,它会自动选择相应版本的 pg_dump:

pg_dump --cluster 9.1/main [other pg_dump options]

或者

pg_dump --cluster 9.3/main [other pg_dump options].

main只是一个默认值,运行pg_lsclusters以查看Cluster列中的实际名称。

它是如何工作的:由 Ubuntu 软件包安装,/usr/bin/pg_dump实际上是一个到 的软链接/usr/share/postgresql-common/pg_wrapper,其目的正是选择正确的实例并运行相应的二进制文件。--clusterPostgreSQL 命令中不存在,它是 Debian/Ubuntu 的补充,旨在解决这个多版本/多路径问题。

这对于psql, createdb,createuser等也是一样的。大约 18 个 postgres 命令/usr/bin实际上是由pg_wrapper.

有关更多信息,请参阅man pg_wrapper


小智 9

您可以使用:

sudo find / -name pg_dump
Run Code Online (Sandbox Code Playgroud)

pg_dump在我的情况下找到你的版本:/usr/pgsql-9.6/bin/pg_dump

所以接下来我们可以这样做:

sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump
Run Code Online (Sandbox Code Playgroud)

为了更新到我们需要的那个