我们刚刚将 PostgreSQL 服务器升级到 v13。我们在 Ubuntu 18 系统上大量使用 pg_dump 在数据库之间传输数据。升级服务器后,pg_dump 会抱怨版本不匹配。
很简单,我从 Apt Postgres repo 安装了 postgres-client-13 (http://apt.postgresql.org/pub/repos/ap)。pg_dump 仍然会抱怨版本不匹配,所以我卸载了 postgresql-client-11。之后 pg_dump 会抱怨“未安装 PostgreSQL 版本 11”。
无论重新安装和删除 PostgreSQL 客户端的次数或顺序如何,都无法解决此错误。有人能告诉我解决此问题的正确方法吗?
答案1
我刚刚也遇到了同样的问题。我使用的是 Debian 10,不过对你来说似乎没什么不同,因为我也使用了 PostgreSQL apt 存储库从版本 11 升级。
如果你运行file $(which pg_dump)
,你会看到它实际上只是一个符号链接/usr/share/postgresql-common/pg_wrapper
。事实证明,这只是一个 perl 脚本,它根据你安装的 Postgres 版本调用相应版本的实用程序。
由于我们都做了同样的事情,我猜如果你查看文件postgresql.conf
,在中/etc/postgresql/13/main/
,端口将被设置5433
为而不是默认的5432
。这似乎是问题的根源。
我只需将端口设置改回正常设置5432
并重新启动 postgres 服务,现在一切都按预期工作。
我实际上尝试过在调用和其他调用 的实用程序时通过命令行设置PGSERVICE
、PGHOST
和变量,但我一直收到输入密码的提示,这很奇怪,因为我以用户身份运行所有程序。现在我只是称其为一个谜,有待将来的某个时间去探索。PGPORT
createdb
pg_wrapper
postgres
答案2
就我而言,我已经安装了 postgres-13,但是包 postgresql-14 仍然存在:
$ dpkg -l | grep postgresql-14
rc postgresql-14 14.9-0ubuntu0.22.04.1
一旦删除(dpkg --purge postgresql-14
),pg_dump 便开始再次正常工作。