我正在尝试使用 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 以解决此问题?
答案 0 :(得分:67)
我在Ubuntu上使用Heroku时遇到过这个问题,以及我如何修复它:
按照" Linux downloads (Ubuntu) "中所述添加PostgreSQL apt存储库。 (其他操作系统也有类似的页面。)
使用以下命令升级到最新版本(对我来说是9.3)
sudo apt-get install postgresql
使用以下内容在/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/...
。
答案 1 :(得分:51)
检查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
这将创建更新版本的符号链接。
答案 2 :(得分:40)
Mac有一个内置/usr/bin/pg_dump
命令,默认使用。
使用postgresql安装,您可以在/Library/PostgreSQL/<version>/bin/pg_dump
答案 3 :(得分:25)
您可以找到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
答案 4 :(得分:25)
您可以在pg_dump
客户端计算机中安装PostgreSQL 9.2.1,也可以将$PGHOME
从PostgreSQL服务器计算机复制到客户端计算机。请注意,客户端计算机中不需要initdb
新群集。
完成9.2.1软件的安装后,请记得在.bash_profile
文件中编辑一些环境变量。
答案 5 :(得分:15)
如果您使用的是Ubuntu,则可能安装了旧版postgresql-client
。根据错误消息中的版本,解决方案如下:
sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2
答案 6 :(得分:10)
每次升级或重新安装新版本的PostgreSQL时,都会安装最新版本的 pg_dump
。
您系统上的某个地方必须有一个 PostgreSQL/bin
目录,在您安装的最新版PostgreSQL下(9.2.1是最新的)并尝试运行
来自那里的 pg_dump
。
答案 7 :(得分:5)
对于mac用户 放在.profile文件的顶部。
export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
然后运行
. ~/.profile
答案 8 :(得分:5)
对于使用自制软件的Mac。从Heroku获取数据库时出现此问题。我已经修好了它:
brew upgrade postgresql
答案 9 :(得分:3)
在Ubuntu上,您只需add the most recent Apt repository然后运行:
sudo apt-get install postgresql-client-11
答案 10 :(得分:3)
对于那些运行 Postgres.app :
的人将以下代码添加到.bash_profile
:
export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
重启终端。
答案 11 :(得分:2)
如上所述,这是因为你的postgresql是旧版本 - &gt;更新它 对于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
答案 12 :(得分:1)
如果安装了docker,您可以执行以下操作:
$ docker run postgres:9.2 pg_dump books > books.out
那将下载包含Postgres 9.2的Docker容器,在容器内运行pg_dump
,然后编写输出。
答案 13 :(得分:1)
我遇到了同样的错误,这就是我如何解决此错误的方法。 这意味着您的postgresql版本是9.2.1,但是您已经启动了9.1.6的postgresql服务。
如果您运行psql postgres
,则会看到:
psql (9.2.1, server 9.1.6)
我为解决此问题所做的事情是:
brew services stop postgresql@9.1.6
brew services restart postgresql@9.2.1
现在运行psql postgres
,您应该拥有:psql (9.2.1)
您还可以运行brew services list
来查看postgres的状态。
答案 14 :(得分:1)
答案听起来很愚蠢但是如果你得到上面的错误并且想要为早期版本运行pg_dump,请转到postgres的bin目录并输入
./ pg_dump servername&gt; out.sql ./忽略root并在当前目录中查找pg_dump
答案 15 :(得分: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数据库
答案 16 :(得分:1)
好吧,我遇到了同样的问题,因为我安装了两个postgress版本。
只需使用正确的pg_dump,您无需更改任何内容,在您的情况下:
$> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out
答案 17 :(得分:0)
试试:
export PATH=/usr/local/bin:$PATH
答案 18 :(得分: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/.
只是抓住他们所有
答案 19 :(得分: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_dump
替换终端中的pg_dump
例如:
Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump books > books.out
对我有用!
答案 20 :(得分:0)
我认为其他任何人都没有考虑的其他答案。
如果您安装了多个PG群集(就像我一样),那么您可以使用65
查看这些群集。
您应该能够从显示的列表中看到版本和群集。
然后,您可以执行此操作:
decoding_table[-10]
显然,根据pg_lsclusters
将版本和群集与/分开的内容,将版本和群集名称替换为适合您情况的版本和群集名称。这是针对您希望运行的特定群集。
答案 21 :(得分:0)
如果数据库安装在不同的计算机上,则可能安装了正确版本的pg_dump。这意味着您可以使用SSH远程执行pg_dump命令:
ssh username@dbserver pg_dump books > books.out
您还可以使用公钥身份验证进行无密码执行。实现这一目标的步骤:
答案 22 :(得分:0)
对我来说,问题是更新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
答案 23 :(得分: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验证
答案 24 :(得分:0)
第一步:查看postgres是否具有包含预构建二进制文件的存储库,该存储库包含您要用于您的操作系统的版本:https://www.postgresql.org/download/
如果那行不通(例如,如果您的发行版在那里但不再受支持,那么就不提供正确的二进制文件),或者您只是想直接使用它或使用源代码而不必担心关于添加远程仓库的信息,等等。
我所做的是download所需版本的postgres的原始来源。
解压缩它,cd放入其中,./configure && make
构建它,然后:
postgresql-12.3 $ find . -name pg_dump
./src/bin/pg_dump/pg_dump
$ ./src/bin/pg_dump/pg_dump
unable to load libpg.so.5 # if it says this...
$ find . -name libpg.so.5
$ export LD_LIBRARY_PATH=/your/path/to/the/shared/dir/of/above/file
$ ./src/bin/pg_dump/pg_dump # works now
现在,您可以访问包装盒上构建的任何版本。应该是哪个。
答案 25 :(得分:0)
在我的情况下,生产版本为12,开发版本为11,升级软件包postgresql-client-xx
足以解决我的事件。
参考网页:https://www.postgresql.org/download/linux/ubuntu/
sudo apt-get update && sudo apt-get -y upgrade postgresql-client
需要指出的一点是,升级后,以前的版本将保持安装状态:
mlazo@mlazo-pc:~$ dpkg -l |grep -i postgresql-client
ii postgresql-client-11 11.8-1.pgdg18.04+1 amd64 front-end programs for PostgreSQL 11
ii postgresql-client-12 12.4-1.pgdg18.04+1 amd64 front-end programs for PostgreSQL 12
希望我的经验对某人有帮助。
问候,
答案 26 :(得分:0)
您的本地版本需要与 AWS 在远程服务器上使用的版本相匹配。 不幸的是,apt-get install 会落后于正式版本。
所以你需要按照以下方式进行:
sudo apt-get remove postgresql
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
然后检查你的错误信息应该是这样的
pg_dump: server version: 12.3; pg_dump version: 10.16 (Ubuntu 10.16-0ubuntu0.18.04.1)
所以这意味着您需要版本 12(而不是 13),通过在全新安装期间指定版本号(不带次要版本)来安装匹配版本:
sudo apt-get -y install postgresql-12
现在可以了:
pg_dump -h {{endpoint}} -U {{username}} -f dump.sql {{tablename}}
注意:您在连接和安全中获得端点,转到https://us-east-2.console.aws.amazon.com/rds/home?region=us-east-2并点击您的数据库实例
答案 27 :(得分:0)
这对我有用,是来自上面和其他网站的解决方案的集合。如果您之前指定了 postgressql-client-11 之类的版本,则需要先删除该版本。
sudo apt-get remove -y postgresql-client
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y postgresql-client-12
答案 28 :(得分:0)
我有同样的消息,对我来说,我必须调整以下内容:
export LD_LIBRARY_PATH=/usr/pgsql-12/lib:....
export LD_RUN_PATH=/usr/pgsql-12/lib:.....
答案 29 :(得分:0)
对于带有“官方”postgresql 存储库的 Ubuntu 20.04,从 pg12 移动到 pg13,我必须这样做:
sudo apt purge postgresql-12
这对我来说很难确定。我玩过各种这些包:
咆哮:Postgresql 可以是一袋剃须刀。看看有多少人努力回答这个简单的问题。混合和匹配 sql/nosql 很好,但是如果您是一个想要“正常工作”的开发人员,请坚持使用 mongodb、sqlite 或 mariadb。反正我的 2c 一文不值。
答案 30 :(得分:-6)
我的Fedora 17安装遇到了类似的问题。这就是我解决问题的方法
pg_dump
处的内置/usr/bin/pg_dump
(以root身份:“rm / usr / bin / pg_dump”)现在建立postgresql安装的符号链接
再次以root ln -s /usr/pgsql-9.2/bin/pg_dump /usr/bin/pg_dump
应该做的伎俩