我在我的电脑上安装了两个 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 - 我需要安装两个数据库服务器)。
我在我的电脑上安装了两个 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 - 我需要安装两个数据库服务器)。
TL;DR:如果两个 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
.有关更多信息,请参见man pg_wrapper。
您可以使用:
pg_dump
在我的例子中找到你的版本:/usr/pgsql-9.6/bin/pg_dump
所以接下来我们可以做:
为了更新到我们需要的
如果您正在运行 docker,则可以运行任何版本的 pg_dump,而无需管理多个安装。这将
/path/to/dump/to/myfilename.dump
使用 postgres 12.5 写入一个文件:--rm
命令完成后删除容器--network=host
将容器连接到主机本地网络-v ...
将您的主机目录 (/path/to/dump/to
) 挂载到容器内的临时目录您只需确保您挂载到的目录 (
/tmp/dump
) 与 pg_dump 正在写入的目录相同。然后你可以将 12.5 更改为你想要的任何版本。