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个回答

10

对于使用Homebrew的Mac用户,当从Heroku获取数据库时,我遇到了这个问题。我只需运行以下命令即可解决:

brew upgrade postgresql

你有时可以轻松地从中获取特定版本,只需执行 brew search postgres 即可查看所有版本。 - rogerdpack

7

一个我认为其他人没有涵盖的备选答案。

如果你安装了多个PG集群(就像我一样),那么你可以使用pg_lsclusters来查看这些集群。

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

从那里,你可以这样做:

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

显然,根据pg_lsclusters返回的结果,用斜杠分隔版本和集群名称,替换成适合你情况的版本和集群名称。这将针对你想要运行的特定集群。


1
这非常有用。因为我曾经困惑为什么 pg_dump 在我的一个集群上无法工作。原来是它使用了默认的Postgresql版本,而我的其中一个集群已经升级到了新版本。指定集群解决了这个问题。 - Andrius

7
对于Mac用户,请将以下内容添加到.profile文件的顶部:
export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

然后运行

. ~/.profile

6

对我来说,问题在于更新 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。 - vinh
我不需要明确地使用新的,它自动识别了。 - rado

5

这对我非常有效,是从其他网站上收集到的一系列解决方案。如果之前您指定过像 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

4
如上所述,这是因为你的postgresql版本过旧 ->请升级它。 对于Mac用户,可通过Homebrew来更新:

brew tap petere/postgresql

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

移除旧版的postgresql:

brew unlink postgresql

brew link -f postgresql-9.6

如果发生任何错误,请确保阅读并按照每个步骤中的brew说明进行操作。

点击以下链接了解更多信息:https://github.com/petere/homebrew-postgresql


3

我曾面临同样的问题。我使用 Docker 替代升级 pg_dump。

运行以下命令创建一个 PostgreSQL 14.2 的 Docker 容器,或者创建任何你想要的其他 版本

sudo docker run --name mac_postgres -p 5444:5432 -e POSTGRES_PASSWORD=password -d postgres:14.2

然后使用以下命令进行转储。注意:您应根据实际数据库凭据更改主机端口用户名密码

sudo docker exec -it  mac_postgres  pg_dump --host=xxxxx0.b.db.ondigitalocean.com --port=250xx --username=doadmin --dbname=test --password > out.sql

输入密码后,你的数据将以out.sql文件的形式准备好。然后你可以删除Docker容器。

sudo docker stop mac_postgres
sudo docker rm mac_postgres

您需要在系统上安装Docker才能继续使用此解决方案。 - Abhinav Keshri

3

我曾经遇到了同样的错误,以下是我解决这个问题的方法。

这意味着你的postgresql版本是9.2.1,但你启动了9.1.6的postgresql服务。

如果你运行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的状态。


3

这个答案听起来有点傻,但是如果你遇到了上述错误并想要运行早期版本的pg_dump,请前往postgres的bin目录并输入以下命令:

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


2

请尝试以下操作:

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

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