如何解决pg_dump版本不匹配错误?

37

在试图将本地数据传输到Heroku时,我遇到了两个不同版本的pg_dump之间的版本不匹配问题。

具体而言,我收到了以下消息:

pg_dump: server version: 9.2.2; pg_dump version: 9.1.4
pg_dump: aborting because of server version mismatch

我发现有其他人也遇到了这个问题,但是不知道如何实施所提出的解决方案。(我刚接触Ruby on Rails、PostgreSQL、Heroku和Mac!目前处于玩耍、边学边摸索的阶段。)

我想如果在我的本地机器上卸载所有的PostgreSQL,并从http://postgresapp.com/重新安装干净的PostgreSQL 9.2.2,可能可以简化我的生活,但我不知道如何卸载它。

我使用的是Mac OS X Mountain Lion 10.8.2。


我已经解决了我的问题,像这个答案http://serverfault.com/a/426510中所述,更改了“链接”路径。 - Aleks
7个回答

38

OS X 10.8自带/usr/bin目录下的pg_dump版本号为9.1.4的工具,还有psql和其他一些客户端PostgreSQL工具。这并不意味着安装了PostgreSQL服务器(除非您有OS X服务器版)。

因此,您无需卸载PostgreSQL,因为它未安装,最好不要删除/usr/bin中这些postgres客户端工具,因为它们属于由Apple提供的系统组件。只需要选择使用其他工具即可。

postgres.app提供的软件包既包括PostgreSQL服务器,也包括相同版本的客户端工具。这些工具安装在/Applications/Postgres.app/Contents/MacOS/bin下。

如果您想在终端中使用这些工具而不是来自苹果的9.1版本工具,请参阅postgres.app的文档执行以下操作:

PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

并将其放入您的.profile文件中。

一旦您完成了这个步骤并运行pg_dump,您就不应该再收到错误消息,因为它将使用随 postgres.app 一起提供的版本(目前为9.2.2)。

我已经进行了此设置,并且对我来说可以正常工作。


1
谢谢你,Daniel!由于我是OS X的新手,所以一开始无法立即实现您的建议,但是我找了一个朋友来帮助我。最终,他根据您的建议编辑了“.bash_profile”。我不再收到“版本不匹配”错误,并且转储文件已经创建了。进展如此顺利!再次感谢。Mike - user1147171
@Daniel,如果我使用官方安装程序(http://www.enterprisedb.com/products-services-training/pgdownload#osx)安装了Postgres,我该如何解决这个错误? - Rizon
1
@Rizon:据我所知,没有官方安装程序。请查看postgresql.org有关OS X的预编译版本的信息。除此之外,上述答案的常规版本是只需使用您已安装的服务器附带的客户端工具(如pg_dump、psql等)。 - Daniel Vérité
4
如果您使用图形安装程序(当前版本为9.2.4),则pg_dump位于/Library/PostgreSQL/9.2/bin/pg_dump。 - Michael Wasser
3
像 @MichaelWasser 所说,如果你下载了图形化编辑器,请确保在 .profile 或者 .bash_profile 中设置你的路径为 PATH=/Library/PostgreSQL/9.2/bin/:$PATH - keaplogik
如果您正在使用带有多个Postgres版本的postgres.app版本,则可以在/Applications/Postgres.app/Contents/Versions/X.X/bin中访问特定版本的工具。 - Charles Davis

36
如果您只需要将pg_dump升级到最新版本,并且您使用Homebrew和Mac,则如果应用程序具有最新版本而本地的pg没有,则可以执行以下操作:

brew upgrade postgresql


2
这是最简单的解决方案,值得首先尝试(在我的OS X 10.9上有效),然后再深入研究其他有效方法。 - pjmorse
3
不幸的是,它不更新pg_dump。运行此命令后,我仍然会得到以下错误信息:while executing pg_dump: pg_dump: error: server version: 13.1; pg_dump version: 12.2 (Debian 12.2-2.pgdg90+1) - user3325025

6

2

我是运行Mountain Lion Server的。我的PostgreSQL服务器版本为9.2.1,而默认工具版本为9.1.5。

我必须使用:

PATH="/Applications/Server.app/Contents/ServerRoot/usr/bin:$PATH"

让它工作起来。


1

有时候,如果你升级了Postgres.app,这种情况可能会发生。确保重新启动你的Postgres.app - 它将更新你的PATH。


1
在我的情况下,我通过homebrew安装了postgresql,可执行文件位于这里:/usr/local/opt/postgresql@9.6/bin。
或者您可以将转储和还原执行文件复制到/Applications/Postgres.app/Contents/SharedSupport文件夹中。
或者在PdAgmin中,您可以将PG bin路径(在属性->二进制路径中)指向您的postgre可执行文件的路径。

0

我们在Kubernetes集群中使用PostgreSQL-14数据库时遇到了相同的(不匹配)问题。因此,我们删除了当前安装的"postgresql-client-13"并安装了客户端版本-14,使用以下代码:

apt-get install -y postgresql-client-14 在Docker镜像中。

然后,我们就能够连接到数据库并进行备份转储!所以,请根据错误提示修复不匹配问题。保重!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接