当我需要安装两个 PostgreSQL 服务器时,如何使用 pg_dump 解决“服务器版本不匹配”问题?

当我需要安装两个 PostgreSQL 服务器时,如何使用 pg_dump 解决“服务器版本不匹配”问题?

我在计算机上安装了两个 PostgreSQL 服务器。一个是 9.1,另一个是 9.3。我需要安装这两个服务器。

但是,当我运行 pg_dump 时,出现版本不匹配错误:

server version: 9.3.6; pg_dump version: 9.1.15
pg_dump: aborting because of server version mismatch

我该如何解决?(无法卸载任何一个版本 - 我先安装了 9.1,几个月后又安装了 9.3 - 我需要两个都数据库服务器已安装)。

答案1

总结:如果两个 PostgreSQL 实例都由 Ubuntu 软件包管理(应该如此),只需使用--cluster选项选择要备份的 PostgreSQL 实例,它将自动选择相应版本的 pg_dump:

pg_dump --cluster 9.1/main [other pg_dump options]

或者

pg_dump --cluster 9.3/main [other pg_dump options]

main只是一个默认值,运行pg_lsclusters即可在列中看到您的实际名称Cluster

其工作原理:由 Ubuntu 软件包安装,/usr/bin/pg_dump实际上是 的软链接/usr/share/postgresql-common/pg_wrapper,其目的正是选择正确的实例并运行相应的二进制文件。--cluster在库存 PostgreSQL 命令中不存在,它是 Debian/Ubuntu 的附加功能,旨在解决这个多版本/多路径问题。

psql对于、createdb、等也是如此createuser。 中的大约 18 个 postgres 命令/usr/bin实际上由 管理pg_wrapper

pg_wrapper 手册了解更多信息。

答案2

您可以使用:

sudo find / -name pg_dump

pg_dump在我的例子中,找到您的版本:/usr/pgsql-9.6/bin/pg_dump

接下来我们可以这样做:

sudo ln -sfn /usr/pgsql-9.6/bin/pg_dump /usr/bin/pg_dump

为了更新到我们需要的版本

答案3

如果您正在运行 docker,则可以运行任何版本的 pg_dump,而无需管理多个安装。这将/path/to/dump/to/myfilename.dump使用 postgres 12.5 写入文件:

docker run --rm --network=host -v "/path/to/dump/to:/tmp/dump" \
  postgres:12.5 pg_dump -Fc -v --dbname="my_db_bame" -f "/tmp/dump/myfilename.dump"
  • --rm命令完成后删除容器
  • --network=host将容器连接到主机本地网络
  • -v ...将主机目录 ( /path/to/dump/to) 挂载到容器内的临时目录

您只需确保您挂载到的目录(/tmp/dump)与 pg_dump 写入的目录相同。

然后您可以将 12.5 更改为您想要的任何版本。

相关内容