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


13

我在计算机上安装了两个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

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


明确运行9.3版pg_dump。两者都已安装,但默认值只有一个。请参阅参考资料update-alternatives中的路径,或dpkg -L通过postgresql客户端软件包查看它们的位置。没有立即访问Ubuntu框向您展示自己的权限。
Craig Ringer

不能。pg_dump命令正在从另一个应用程序运行。
Luis Masuelli

然后,您必须更改PATH运行应用程序的环境变量。
Craig Ringer

我有同样的问题。我必须通过PostgreSQL apt仓库进行安装:askubuntu.com/a/831293/448857
neoneye

Answers:


16

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,其目的恰恰是选择正确的实例并运行相应的二进制文件。--cluster在现有的PostgreSQL命令中不存在,这是Debian / Ubuntu的新增功能,旨在解决该多个版本/多个路径的问题。

这是相同的psqlcreatedbcreateuser等约18个postgres的命令在/usr/bin实际上是由管理pg_wrapper

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


版本/主要是什么?主要是什么?
亚历山大·米尔斯

1
@AlexanderMills:version= postgresql的主要版本和main=集群的默认名称。请参见pg_lsclusters和pg_wrapper的手册页。
DanielVérité19年

7

您可以使用:

sudo find / -name pg_dump

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

所以接下来我们可以做:

sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.