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时遇到过这个问题,下面是我如何修复它:
-
按照“ Linux下载(Ubuntu) ”所述添加PostgreSQL apt库。 (其他操作系统也有类似的页面。)
-
升级到最新版本(我为9.3)与:
sudo apt-get install postgresql
-
使用以下命令重新创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
获得另一个二进制文件
-
检查pg_dump的安装版本:
find / -name pg_dump -type f 2>/dev/null
-
我的输出是:
/usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump
-
有两个版本安装。 用更新的版本更新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进行无密码执行。 实现这一目标的步骤:
- 用ssh-keygen命令生成(如果尚未完成)一对密钥。
- 将公钥复制到数据库服务器,通常是〜/ .ssh / authorized_keys。
- testing连接是否与ssh命令一起工作。
对于mac,使用find / -name pg_dump -type f 2>/dev/null
findpg_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_dump
replace
例如:
Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out
这个对我有用!
对于那些运行Postgres.app的人 :
-
将下面的代码添加到
.bash_profile
:export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
-
重新启动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
这应该够了吧