我在计算机上安装了两个 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 更改为您想要的任何版本。