175

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

4

31 回答 31

86

我在 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/...

于 2014-04-08T19:29:41.607 回答
83
  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
    

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

于 2015-09-03T09:25:46.630 回答
43

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

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

于 2013-03-08T12:48:19.517 回答
36

您可以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
于 2017-02-10T11:40:52.613 回答
30

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

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

于 2012-10-11T09:26:47.427 回答
19

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

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2
于 2014-03-08T21:39:47.120 回答
14

在 Ubuntu 上,您可以简单地添加最新的 Apt 存储库,然后运行:

sudo apt-get install postgresql-client-11
于 2019-09-04T13:27:49.347 回答
12

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

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

于 2012-10-11T09:45:09.830 回答
11

对于那些运行Postgres.app的人:

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

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

于 2017-10-07T01:16:04.470 回答
10

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

brew upgrade postgresql
于 2016-09-12T07:44:35.123 回答
9

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

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

这将下载包含 Postgres 9.2 的 Docker 容器,pg_dump在容器内部运行,然后写入输出。

于 2016-10-07T21:57:25.950 回答
7

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

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

然后运行

. ~/.profile
于 2013-10-13T14:17:04.070 回答
6

我认为其他人没有涵盖的替代答案。

如果您安装了多个 PG 集群(就像我一样),那么您可以使用pg_lsclusters.

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

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

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

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

于 2018-05-25T18:28:41.803 回答
4

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

于 2016-11-09T04:39:37.543 回答
4

对我来说,问题是更新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/

于 2019-10-28T17:00:21.493 回答
3

答案听起来很傻,但是如果您遇到上述错误并想为早期版本运行 pg_dump,请转到 postgres 的 bin 目录并键入

./pg_dump servername > out.sql ./ 忽略根目录并在当前目录中查找 pg_dump

于 2018-04-11T18:25:35.400 回答
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 的状态。

于 2019-06-19T09:43:02.237 回答
2

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

抓住他们

于 2013-10-01T15:53:27.187 回答
2

** 安装后 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 数据库

于 2013-12-04T03:51:32.010 回答
2

试试看:

export PATH=/usr/local/bin:$PATH
于 2014-10-17T15:26:50.753 回答
2

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

您还可以使用公钥身份验证进行无密码执行。实现这一目标的步骤:

  1. 使用 ssh-keygen 命令生成(如果尚未完成)一对密钥。
  2. 将公钥复制到数据库服务器,通常是 ~/.ssh/authorized_keys。
  3. 使用 ssh 命令测试连接是否有效。
于 2016-01-14T15:18:27.230 回答
2

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

只需使用正确的 pg_dump 就无需更改任何内容,在您的情况下:

 $> /usr/lib/postgresql/9.2/bin/pg_dump books > books.out
于 2016-11-15T08:28:09.403 回答
1

对于 mac,使用find / -name pg_dump -type f 2>/dev/nullfind 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

这个对我有用!

于 2016-10-27T06:21:08.780 回答
0

第一步:查看 postgres 是否有一个存储库,其中包含您想要的操作系统版本的预构建二进制文件:https ://www.postgresql.org/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

现在您可以访问在您的盒子上构建的任何版本。应该是任何。

于 2020-09-21T19:48:53.460 回答
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

希望我的经验对某人有所帮助。

问候,

于 2020-10-06T02:58:15.880 回答
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并单击您的数据库实例

于 2021-03-04T18:02:24.910 回答
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
于 2021-03-10T09:43:46.933 回答
0

我有同样的信息,对我来说,我必须调整以下内容:

export LD_LIBRARY_PATH=/usr/pgsql-12/lib:....
export LD_RUN_PATH=/usr/pgsql-12/lib:.....
于 2021-03-31T14:48:16.543 回答
0

对于带有“官方”postgresql 存储库的 Ubuntu 20.04,从 pg12 移动到 pg13,我必须这样做:

sudo apt purge postgresql-12

这对我来说很难确定。我玩过各种这样的包:

  • postgresql 客户端
  • postgresql-client-common
  • postgresql-##
  • postgresql-客户端-##
  • postgresql-server-dev-##
  • pgadmin

咆哮:Postgresql 可以是一袋剃须刀。看看有多少人在努力回答这个简单的问题。混合和匹配 sql/nosql 很好,但如果你是一个想要“正常工作”的开发人员,请坚持使用 mongodb、sqlite 或 mariadb。反正我一文不值的2c。

于 2021-08-04T01:02:08.797 回答
0
run pg_dump -d [DATABASE] -h [HOST] -p [PORT] -U [USER]

它将 pg_dump 与 postgres 版本匹配并成功运行您的转储

于 2021-11-28T00:02:44.403 回答
-6

我在安装 Fedora 17 时遇到了类似的问题。这就是我为解决这个问题所做的

  • 删除内置pg_dump/usr/bin/pg_dump(作为根:“rm /usr/bin/pg_dump”)
  • 现在制作postgresql安装的符号链接

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

这应该够了吧

于 2013-04-21T10:11:08.433 回答