Postgreql 9.2 pg _ dump 版本不匹配

我正在尝试使用 Pg _ dump工具转储 Postgreql 数据库。

$ 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来解决这个问题?

325949 次浏览

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

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

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

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

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

在 postgreql 安装后,您将在 /Library/PostgreSQL/<version>/bin/pg_dump处获得另一个二进制文件

我在安装 Fedora 17时也遇到过类似的问题

  • 删除 /usr/bin/pg_dump处的内建 pg_dump(作为 root 用户: “ rm/usr/bin/pg _ dump”)
  • 现在创建 postgreql 安装的符号链接

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

这样应该可以了

如果您正在使用 Heroku 的 Postgre.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/.

把他们都抓起来

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

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

那就跑吧

. ~/.profile

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

* *-on’/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 数据库

如果你在 Ubuntu 上,你可能已经安装了旧版本的 postgresql-client。根据错误信息中的版本,解决方案如下:

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

我在 Ubuntu 上使用 Heroku 时遇到了这个问题,我是这样修复它的:

  1. 添加 PostgreSQL apt 存储库,如下所述:”< a href = “ http://www.postgreql.org/download/Linux/Ubuntu/”rel = “ norefrer”> Linux 下载(Ubuntu) ”(其他操作系统也有类似的页面。)

  2. 升级到最新版本(对我来说是9.3) :

    sudo apt-get install postgresql
    
  3. Recreate the symbolic link in /usr/bin with:

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

试试这个:

export PATH=/usr/local/bin:$PATH
  1. 检查 pg _ dump 的安装版本:

    find / -name pg_dump -type f 2>/dev/null
    
  2. My output was:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
  3. There are two versions installed. To update pg_dump with the newer version:

    sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force
    

This will create the symlink to the newer version.

如果数据库安装在另一台机器上,那么它可能已经安装了正确的 pg _ dump 版本。这意味着您可以使用 SSH 远程执行 pg _ dump 命令: ssh username@dbserver pg_dump books > books.out

你也可以使用公共密钥认证进行无密码执行,步骤如下:

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

我从 Heroku 取数据库的时候遇到了这个问题,我只是运行了一下就修好了:

brew upgrade postgresql

如果你已经安装了 docker,你可以这样做:

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

它将下载包含 Postgres 9.2的 Docker 容器,在容器内运行 pg_dump,并写入输出。

对于 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,只需使用:

在终端中用 pg_dump代替 Applications/Postgres.app/Contents/Versions/9.5/bin/pg_dump

例如:

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

我喜欢!

如前所述,这是因为 postgreql 是旧版本的-> update 通过自制软件为 Mac 设计:

brew tap petere/postgresql,

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

删除旧邮票:

brew unlink postgresql

brew link -f postgresql-9.6

如果发生任何错误,不要忘记阅读并遵循每一步的酿造指令。

看看这个更多: https://github.com/petere/homebrew-postgresql

嗯,我有同样的问题,因为我有两个后期版本安装。

只要使用适当的 pg _ dump,就不需要修改任何内容了:

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

您只需找到 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

对于那些运行 后遗症应用程序的人:

  1. .bash_profile中添加以下代码:

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
    
  2. Restart terminal.

这个答案听起来很傻,但是如果你得到了上面的错误,并且想要运行早期版本的 pg _ dump,请转到 postgres 的 bin 目录并输入

./pg _ dump servername > out.sql./忽略 root 并在工作目录中查找 pg _ dump

另一个答案,我认为没有其他人已经涵盖。

如果您安装了多个 PG 集群(正如我所做的) ,那么您可以使用 pg_lsclusters查看这些集群。

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

然后,你可以这样做:

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

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

我也犯了同样的错误,这就是我如何在我的情况下解决它。 这意味着 postresql 版本是9.2.1,但是已经启动了9.1.6的 postresql 服务。

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

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

sudo apt-get install postgresql-client-11

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

第一步: 查看 postgres 是否有一个包含预构建二进制文件的存储库,用于您想要的 OS: 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

现在你可以访问任何建立在你的盒子上的版本,应该是任何。

在我的场景中,生产版本是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


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

你好,

完整步骤教程

您的本地版本需要与远程服务器上的 AWS 使用的版本相匹配。 不幸的是,apt-get 安装将滞后于官方版本。

因此,你需要按照以下方法进行:

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并单击 DB 实例

这对我来说很有用,一个来自上面和其他站点的解决方案的集合。如果在此之前指定了 postpressql-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

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

export LD_LIBRARY_PATH=/usr/pgsql-12/lib:....
export LD_RUN_PATH=/usr/pgsql-12/lib:.....

对于 Ubuntu 20.04的“官方”postgreql repo,从 pg12移动到 pg13,我必须这样做:

sudo apt purge postgresql-12

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

  • Postgreql-client
  • Postgreql-client-common
  • 后期
  • Postgreql-client-# #
  • Postgreql-server-dev-# #
  • Pgadmin
run pg_dump -d [DATABASE] -h [HOST] -p [PORT] -U [USER]

它将 pg _ dump 与 postgres 版本匹配,并成功运行转储

我也面临同样的问题,我使用 docker 而不是升级 pg _ dump。

运行以下命令创建 postgres 14.2或任何其他 版本的 Docker 容器。

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

然后使用以下命令获取 dump。注意: 应该根据实际的数据库凭据更改 主持人左舷用户名密码

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

输入密码后,您的转储文件将在 出局文件中准备好。然后您可以删除多克容器。

sudo docker stop mac_postgres
sudo docker rm mac_postgres