Postgresql 9.2 pg_dump版本不匹配

211

我正在尝试使用 pg_dump 工具导出一个Postgresql数据库。

$ pg_dump books > books.out

但是我遇到了这个错误。

pg_dump: server version: 9.2.1; pg_dump version: 9.1.6
pg_dump: aborting because of server version mismatch

--ignore-version 选项现在已弃用,即使它能够工作,也不是解决我的问题的方法。

我该如何升级 pg_dump 来解决这个问题?

32个回答

107
  1. 检查已安装的 pg_dump 版本:

  2. find / -name pg_dump -type f 2>/dev/null
    
  3. 我的输出是:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  4. 已安装两个版本。 要使用较新的版本更新pg_dump,请执行以下操作:

  5. sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force
    
    这将创建到较新版本的符号链接。

4
我用locate pg_dump快速找到了相关版本。 - Obromios
2
在我看来,你不应该添加 2>/dev/null,因为这会将 ERROR 流丢弃而不是将其打印到控制台。我认为除了一些罕见的情况外,人们应该想要看到任何发生的错误。例如,在我的情况下,它提醒我没有 root 权限,因此无法查看安装了新版本 pg_dump 的某些目录。总的来说,不要删除错误信息。 - Poutrathor

95
我在Ubuntu上使用Heroku时遇到了这个问题,以下是我解决的方法:
  1. 按照“Linux downloads (Ubuntu)”中描述的添加PostgreSQL apt存储库。(其他操作系统也有类似的页面。)

  2. 通过以下命令升级到最新版本(对我来说是9.3):

    sudo apt-get install postgresql
    
  3. 使用以下命令在/usr/bin中重新创建符号链接:

    sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump --force
    

    上面路径中的/usr/lib/postgresql/...中的版本号应与您收到的错误中的服务器版本号匹配。因此,如果您的错误显示pg_dump: server version: 9.9,则链接到/usr/lib/postgresql/9.9/...


1
对于任何想知道的人,这个解决方案同样适用于非Heroku的Ubuntu。 - IanBussieres
2
根据这个答案所说,这也是一个非常糟糕的想法。 - Arthur
2
完美!在升级Postgres之后重新创建符号链接。 - Yo Ludke
对我来说完美地解决了问题。我从未想过版本不匹配是由 /usr/bin/pg_dump 导致的,这与我的新的 PostgreSQL 更新无关。我对 ln 解决方案感到满意。 - Franco
@Va 要查看我添加到第3步的附加段落。 - Seth
显示剩余5条评论

44

苹果电脑内置了一个 /usr/bin/pg_dump 命令作为默认选项。

安装postgresql后,还会获得另一个二进制文件,位于 /Library/PostgreSQL/<version>/bin/pg_dump


3
取决于 PostgreSQL 的安装方式(EnterpriseDB 安装程序、MacPorts、Homebrew 等),位置会有所不同,但回答的要点是——用户可能已经安装了正确的版本。 - Craig Ringer
3
在我的情况下,打开 .bash_profile 文件并添加 "export PATH=/Applications/Postgres.app/contents/macos/bin:$PATH" 就可以解决问题。 - Alex Ishida

44
您可以直接找到pg_dump,并在命令中使用完整路径。
locate pg_dump

/usr/bin/pg_dump
/usr/bin/pg_dumpall
/usr/lib/postgresql/9.3/bin/pg_dump
/usr/lib/postgresql/9.3/bin/pg_dumpall
/usr/lib/postgresql/9.6/bin/pg_dump
/usr/lib/postgresql/9.6/bin/pg_dumpall

现在只需要在命令中使用所需版本的路径即可。

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out

1
对于CentOS用户(我的版本是6.9 Final):sudo /usr/pgsql-<version>/bin/pg_dump <database-name> -U <username> -h localhost - Davidson Lima
@jDub9,在进行转储时你使用的是哪个版本?请确保你正在使用相同的版本。 - Deepak Mahakale
第一次需要运行 sudo updatedb 命令来创建 locate 数据库。 - thanos.a
干净的解决方案。我已经安装了Postgres 13和14,只需要将其指向14/bin/pg_dump即可。问题解决了,谢谢。 - Milo Persic

31
你可以在pg_dump客户端安装PostgreSQL 9.2.1,或者只需将PostgreSQL服务器机器上的$PGHOME复制到客户端机器上。请注意,无需在客户端机器上initdb新的集群。

完成9.2.1软件的安装后,请记得编辑.bash_profile文件中的一些环境变量。


20
如果您已经安装了Docker,可以执行以下操作:

If you have docker installed you can do something like:


$ docker run postgres:9.2 pg_dump books > books.out

这将下载带有Postgres 9.2的Docker容器,在容器内运行pg_dump并写入输出。


2
这绝对是最简单和最灵活的解决方案。 - mikebridge
3
这个命令在我的情况下非常有用:docker run --net host --rm -i postgres:14.1 pg_dump -h 127.0.0.1 -U postgres dbname > pg.dump.schema.sql - John Doe
这是一个可以添加到你的.bashrc文件中的函数:pg_dump-version() { docker run --rm "postgres:${1}-alpine" pg_dump ${@:2} },例如:pg_dump 14 $PG - Gunar Gessner

19

如果您使用的是Ubuntu,可能已安装旧版本的postgresql-client。根据您错误信息中的版本号,解决方案如下:

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2

15

在Ubuntu上,您可以简单地添加最新的Apt存储库,然后运行:

在Ubuntu上,您可以简单地添加最新的Apt存储库,然后运行:

sudo apt-get install postgresql-client-11

12
每次升级或重新安装新版本的PostgreSQL时,都会安装最新版本的 pg_dump 。您的系统中必须有一个 PostgreSQL/bin 目录,在您安装的最新版本的PostgreSQL下(9.2.1是最新版本),尝试从其中运行 pg_dump

10
提示:在“Terminal.app”中,使用命令“find / -name pg_dump -type f 2>/dev/null”可以查找名为“pg_dump”的文件。 - Craig Ringer

11

对于使用 Postgres.app 的用户:

  1. 将以下代码添加到你的 .bash_profile 文件中:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
    
  2. 重新启动终端。


这个完美地运行了! - Lahiru Jayaratne
对于那些使用新款 Mac(使用 Zsh 而不是 Bash)的用户,请将上述内容放置在您的 .zshrc 文件中。 - Zach Milan

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