Postgresql 9.2 pg_dump版本不匹配

Chr*_*lla 128 postgresql backup pg-dump postgresql-9.2

我正在尝试使用pg_dump工具转储Postgresql数据库.

$ pg_dump books > books.out
Run Code Online (Sandbox Code Playgroud)

我怎么会得到这个错误.

pg_dump: server version: 9.2.1; pg_dump version: 9.1.6
pg_dump: aborting because of server version mismatch
Run Code Online (Sandbox Code Playgroud)

--ignore-version选项现已弃用,即使有效,也不会解决我的问题.

如何升级pg_dump来解决此问题?

Set*_*eth 68

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

  1. 按照" Linux下载(Ubuntu) "中的描述添加PostgreSQL apt存储库.(其他操作系统也有类似的页面.)

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

    sudo apt-get install postgresql
    
    Run Code Online (Sandbox Code Playgroud)
  3. 用以下内容重新创建符号链接/usr/bin:

    sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump --force
    
    Run Code Online (Sandbox Code Playgroud)

    /usr/lib/postgresql/...上面路径中的版本号应与server version您收到的错误中的数字相匹配.因此,如果您的错误显示pg_dump: server version: 9.9,则链接到/usr/lib/postgresql/9.9/....

  • 根据[这个答案](/sf/ask/898541871/#16130071)所说的,这也是一个非常糟糕的主意. (2认同)
  • 完善!postgres升级后重新创建符号链接 (2认同)

Ome*_*lam 56

  1. 检查pg_dump的已安装版本:

    find / -name pg_dump -type f 2>/dev/null
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我的输出是:

    /usr/pgsql-9.3/bin/pg_dump
    /usr/bin/pg_dump
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装了两个版本.要使用更新版本更新pg_dump:

    sudo ln -s /usr/pgsql-9.3/bin/pg_dump /usr/bin/pg_dump --force
    
    Run Code Online (Sandbox Code Playgroud)

这将创建较新版本的符号链接.

  • 对我来说,使用`locate pg_dump`来查找版本要快得多。 (2认同)
  • IMO,您不应该添加 `2>/dev/null` 因为这会抛出 ERROR 流而不是将其打印到控制台。我认为人们应该希望看到任何错误发生,除了一些罕见的情况。例如,就我而言,它提醒我我不是 root,因此无法看到安装了较新 pg_dump 版本的某些目录。一般来说,不要删除错误。 (2认同)

小智 40

Mac有一个内置/usr/bin/pg_dump命令,用作默认值.

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

  • 位置将根据PostgreSQL的安装方式(EnterpriseDB安装程序,MacPorts,Homebrew等)而有所不同,但答案的要点 - 用户可能已经安装了正确的版本 - 肯定是正确的. (3认同)
  • 在我的例子中,打开.bash_profile并添加"export PATH =/Applications/Postgres.app/contents/macos/bin:$ PATH"就可以了. (3认同)

fra*_*ncs 26

您可以在pg_dump客户端计算机中安装PostgreSQL 9.2.1,也可以只将$PGHOMEPostgreSQL服务器计算机复制到客户端计算机.请注意,initdb客户端计算机中不需要新的群集.

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


Dee*_*ale 24

您可以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
Run Code Online (Sandbox Code Playgroud)

现在只需在命令中使用所需版本的路径即可

/usr/lib/postgresql/9.6/bin/pg_dump books > books.out
Run Code Online (Sandbox Code Playgroud)


Abe*_*ker 15

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

sudo apt-get remove postgresql-client-9.1
sudo apt-get install postgresql-client-9.2
Run Code Online (Sandbox Code Playgroud)


col*_*rco 11

在 Ubuntu 上,您只需添加最新的 Apt 存储库,然后运行:

sudo apt-get install postgresql-client-11
Run Code Online (Sandbox Code Playgroud)


sol*_*anv 10

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

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

  • 提示:在`Terminal.app`中,`find/-name pg_dump -type f 2>/dev/null` (10认同)

And*_*eas 8

对于那些运行Postgres.app的用户

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

    export PATH=/Applications/Postgres.app/Contents/Versions/latest/bin:$PATH
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重新启动终端。


And*_*hyn 6

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

export PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

然后运行

. ~/.profile
Run Code Online (Sandbox Code Playgroud)


Man*_*tra 6

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

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

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

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

pg_dump --cluster=9.6/main books > books.out
Run Code Online (Sandbox Code Playgroud)

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


Gle*_*son 6

对我来说,问题是更新psql apt-get并没有解决新版本,即使在之后update. 以下工作有效。

乌班图

首先导入 PostgreSQL 包的 GPG 密钥。

sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)

现在将存储库添加到您的系统中。

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 上安装 PostgreSQL

sudo apt-get update
sudo apt-get install postgresql postgresql-contrib
Run Code Online (Sandbox Code Playgroud)

https://www.postgresql.org/download/linux/ubuntu/


Ant*_*der 6

这对我有用,是上面和其他网站的解决方案的集合。如果您之前指定了像 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
Run Code Online (Sandbox Code Playgroud)


hca*_*ras 5

对于使用Homebrew的Mac.从Heroku获取数据库时出现此问题.我已修好它只是运行:

brew upgrade postgresql
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

这将下载带有 Postgres 9.2 的 Docker 容器pg_dump,在容器内运行,并写入输出。

  • 这个命令对我来说很有用:`docker run --net host --rm -i postgres:14.1 pg_dump -h 127.0.0.1 -U postgres dbname &gt; pg.dump.schema.sql` (3认同)
  • 这是迄今为止最简单、最灵活的解决方案。 (2认同)