Postgresql 9.2 pg_dump版本不匹配


141

我正在尝试使用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以解决此问题?


Answers:


27

您可以在pg_dump客户端计算机上安装PostgreSQL 9.2.1,也可以仅将$PGHOMEPostgreSQL服务器上的PostgreSQL 复制到客户端计算机。请注意,initdb客户端计算机中不需要新的集群。

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


75

我在Ubuntu上使用Heroku时遇到了此问题,这是我如何解决的问题:

  1. 按照“ Linux下载(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/...上面路径中的版本号应与server version您收到的错误中的版本号匹配。因此,如果您的错误显示pg_dump: server version: 9.9,则链接至/usr/lib/postgresql/9.9/...


这仅在升级PostgreSQL时发生。我只是重新安装了操作系统,因此没有任何问题。
赛斯2014年

对于任何想知道的人,该解决方案也适用于非Heroku Ubuntu。
IanBussieres 2014年

2
根据此答案中所说的内容,这也是一个非常糟糕的主意。
亚瑟

该答案建议通过删除文件夹来删除软件。在这里,我们只是重新创建一个符号链接。
赛斯2014年

2
完善!在postgres升级后重新创建符号链接
Yo Ludke

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

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

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
  3. 安装了两个版本。要用较新的版本更新pg_dump:

    sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force

这将创建到较新版本的符号链接。


2
对我来说,使用locate pg_dump
Obromios

1
IMO,您不应添加,2>/dev/null因为那样会抛出ERROR流,而不是将其打印到控制台。我认为人们应该希望看到发生任何错误的情况,除了一些罕见的情况。例如,在我的情况下,它使我想起我不是root用户,因此看不到某些安装了较新pg_dump版本的目录。通常,请勿删除错误。
Poutrathor

40

Mac有内置/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”确实神奇。
亚历克斯·韦伯

29

您可以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进行转储时使用了什么版本?请确保您使用的是相同的
迪派Mahakale

16

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

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

11

每次升级或重新安装PostgreSQL的新版本时, pg_dump 都会安装的最新版本。

PostgreSQL/bin 在您安装的最新版本的PostgreSQL(最新的9.2.1)下,您的系统上必须有一个目录,然后尝试 pg_dump 从该目录运行该目录 。


10
提示:Terminal.appfind / -name pg_dump -type f 2>/dev/null
克雷格林格

8

对于那些运行Postgres.app的用户

  1. 将以下代码添加到您的.bash_profile

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


7

对于带有Homebrew的Mac。从Heroku获取数据库时遇到了这个问题。我已经修复了它刚运行的问题:

brew upgrade postgresql



3

如所解释的,这是因为您的postgresql是旧版本->通过自制程序在Mac上对其进行更新:

brew tap petere/postgresql

brew install <formula>(如:brew install petere/postgresql/postgresql-9.6

删除旧的postgre:

brew unlink postgresql

brew link -f postgresql-9.6

如果发生任何错误,请不要忘记在每个步骤中阅读并遵循brew说明。

查看更多信息:https : //github.com/petere/homebrew-postgresql


3

我认为没有其他人可以解决的另一种答案。

如果您已经安装了多个PG群集(如我所述),则可以使用进行查看pg_lsclusters

您应该能够从显示的列表中看到版本和群集。

从那里,您可以执行以下操作:

pg_dump --cluster=9.6/main books > books.out

显然,通过pg_lsclusters使用/分隔版本和群集,将版本和群集名称替换为适合您情况的名称和返回的名称。这将针对您要运行的特定群集。


1
这非常有用。令我感到困惑的是,为什么pg_dump不能在我的一个集群上工作。原来,当我的集群之一升级到较新版本时,它使用的是默认的Postgresql版本。指定集群,解决了问题。
Andrius

3

对我来说psql apt-get,即使更新了,更新的问题也解决不了新版本update。以下工作。

的Ubuntu

从导入PostgreSQL软件包的GPG密钥开始。

sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

现在,将存储库添加到您的系统。

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

在Ubuntu上安装PostgreSQL

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib

https://www.postgresql.org/download/linux/ubuntu/


1
这不会替换计算机上现有的可执行文件,因此您需要显式使用新版本的pg_dump,例如/usr/lib/postgresql/9.6/bin/pg_dump或创建新的快捷方式,例如/ usr / bin / pg_dump96

我不必显式地使用新的拾音器。
拉多

2

如果您已安装docker,则可以执行以下操作:

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

这将下载其中包含Postgres 9.2的Docker容器,pg_dump在该容器中运行并写入输出。


2

答案听起来很愚蠢,但是如果您遇到上述错误,并且想运行pg_dump以使用较早的版本,请转至postgres的bin目录并键入

./pg_dump服务器名> out.sql ./忽略根目录,并在当前目录中查找pg_dump


2

我有同样的错误,这就是我所解决的方式。这意味着您的postgresql版本是9.2.1,但是您已经启动了9.1.6的pos​​tgresql服务。

如果您运行psql postgres,将会看到:

psql (9.2.1, server 9.1.6)

我为解决此问题所做的是:

  1. brew services stop postgresql@9.1.6
  2. brew services restart postgresql@9.2.1

现在运行psql postgres,您应该具有:psql (9.2.1)

您还可以运行brew services list以查看postgres的状态。


1

**安装postgres版本匹配后(9.2)创建符号链接或新的快捷方式

**-在'/ usr / bin'上

syntag is = sudo ln -s [path for use] [new shortcut name]

sudo ln -s /usr/lib/postgresql/9.2/bin/pg_dump new_pg_dump

-如何调用:new_pg_dump -h 192.168.9.88 -U postgres数据库



1

如果数据库安装在其他机器上,则可能安装了正确版本的pg_dump。这意味着您可以使用SSH远程执行pg_dump命令: ssh username@dbserver pg_dump books > books.out

您也可以使用公共密钥身份验证来执行无密码的操作。实现该目标的步骤:

  1. 使用ssh-keygen命令生成(如果尚未完成)一对密钥。
  2. 将公用密钥复制到数据库服务器,通常为〜/ .ssh / authorized_keys。
  3. 使用ssh命令测试连接是否正常。

1

好吧,我有同样的问题,因为我安装了两个postgress版本。

只需使用适当的pg_dump,您就不需要更改任何内容:

 $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out

0

如果您使用的是Heroku的Postgres.app,则pg_dump(以及所有其他二进制文件)都在 /Applications/Postgres.app/Contents/MacOS/bin/

所以在那种情况下

ln -s /Applications/Postgres.app/Contents/MacOS/bin/pg_dump /usr/local/bin/pg_dump

要么

ln -s /Applications/Postgres.app/Contents/MacOS/bin/* /usr/local/bin/.

抓住他们


0

对于Mac,使用find / -name pg_dump -type f 2>/dev/null查找pg_dump的位置

对我来说,我得到以下结果:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump
/usr/local/Cellar/postgresql/9.4.5_2/bin/pg_dump

如果您不想使用sudo ln -s new_pg_dump old_pg_dump --force,请使用:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dumppg_dump在您的终端中替换为

例如:

Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out

这个对我有用!


0

在此处下载适当的postgres版本:

https://www.postgresql.org/download/

确保以sudo运行以下命令(postgresql.org/download URL将生成供您使用的特定URL;我在下面使用的仅是centos 7的示例):

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql11-server

您的pg_dump版本现在应该更新,请使用pg_dump -V进行验证


-6

我在Fedora 17安装上遇到了类似的问题。这就是我解决该问题的方法

  • 删除内置pg_dump/usr/bin/pg_dump(如根: “RM的/ usr /斌/ pg_dump的”)
  • 现在建立postgresql安装的符号链接

    再次作为根 ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump

这应该够了吧


9
Nonono,不要只删除软件包托管文件!如果它在/usr/(而不是/usr/local//home//opt/,其中删除的东西一般是OK),你真的需要使用包管理器- rpmyumdpkgapt-getaptitude,发行,根据。可以使用卸载软件包rpm或更改PATH环境变量,.bash_profile以便首先找到较新的版本。如果您不确定某些项目在打包管理之下,请使用rpm -qf /path/to/file(RPM)或dpkg -S /path/to/file(dpkg)
Craig Ringer 2013年
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.