Postgresql 9.2 pg_dump版本不匹配

我正在尝试使用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选项现在已经被折旧了,即使它已经工作了,也不会成为我的问题的解决scheme。

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

您可以在pg_dump客户端机器上安装PostgreSQL 9.2.1,或者将$PGHOME从PostgreSQL服务器机器复制到客户端机器上。 请注意,不需要在客户机中initdb一个新的群集。

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

我在Ubuntu上使用Heroku时遇到过这个问题,下面是我如何修复它:

  1. 按照“ Linux下载(Ubuntu) ”所述添加PostgreSQL apt库。 (其他操作系统也有类似的页面。)

  2. 升级到最新版本(我为9.3)与:

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

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

    上面的/usr/lib/postgresql/...path中的server version号应与您收到的错误中的server version号相匹配。 所以,如果你的错误说, pg_dump: server version: 9.9 ,然后链接到/usr/lib/postgresql/9.9/...

Mac有一个默认使用的内build/usr/bin/pg_dump命令。

通过postgresql安装,您可以在/Library/PostgreSQL/<version>/bin/pg_dump获得另一个二进制文件

  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 

这将创build符号链接到新版本。

如果你在Ubuntu上,你可能会安装旧版本的postgresql-client 。 根据错误消息中的版本,解决scheme如下:

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

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

你的系统上必须有一个PostgreSQL/bin目录,在你安装的PostgreSQL的最新版本(9.2.1是最新版本)下,尝试从那里运行pg_dump

你可以findpg_dump并使用命令中的完整path

 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 

现在只需在命令中使用所需版本的path

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

对于放在.profile文件顶部的mac用户。

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

然后运行

 . ~/.profile 

对于自制软件的Mac。 从Heroku中获取数据库时遇到这个问题。 我已经修复它只是运行:

 brew upgrade postgresql 

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

** – 在'/ 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数据库

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

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

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

正如解释,这是因为你的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

希望这个帮助

那么,我有同样的问题,我有两个postgress版本安装。

只要使用正确的pg_dump,你就不需要改变任何东西:

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

如果您使用的是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/.

只抓住他们

尝试一下:

 export PATH=/usr/local/bin:$PATH 

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

您也可以使用公钥authentication进行无密码执行。 实现这一目标的步骤:

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

对于mac,使用find / -name pg_dump -type f 2>/dev/nullfindpg_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_dump pg_dump在您的terminal中用pg_dumpreplace

例如:

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

这个对我有用!

对于那些运行Postgres.app的人

  1. 将下面的代码添加到.bash_profile

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

我在Fedora 17上遇到了类似的问题。 这是我所做的解决这个问题

  • 删除/usr/bin/pg_dump的内buildpg_dump (以root身份:“rm / usr / bin / pg_dump”)
  • 现在创build一个postgresql安装的符号链接

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

这应该够了吧