我最初在 Ubuntu 上安装了 postgres 9.2,后来根据此处的说明升级到 9.3:http://www.postgresql.org/download/linux/ubuntu/(使用 postgres apt 存储库)。
但是,/usr/share/postgresql-common/pg_wrapper 的别名 pg_dump 并未升级。
pg_dump: server version: 9.3.4; pg_dump version: 9.2.8
pg_dump: aborting because of server version mismatch
我该如何升级它?我试图找出哪些包需要更新,但我甚至不确定这是否是正确的做法。
答案1
事实证明,安装 9.3 客户端不会自动卸载 9.2 客户端,如果它们都像这样在机器上,那么这就是你得到的结果。答案是删除 postgresql-client-9.2(或你的情况下适当的旧版本)。
答案2
如果你需要一些您可能同时使用 postgresql 客户端版本
pg_dump --cluster 9.2/main [other pg_dump options]
对于旧集群和
pg_dump --cluster 9.3/main [other pg_dump options]
适用于新的
查看 askubuntu 上接受的答案以了解详细信息:https://askubuntu.com/a/647341/1044581
答案3
我设法通过卸载 postgresql 客户端解决了我的问题
sudo apt-get remove postgresql-client-common
然后重新安装
sudo apt-get install postgresql-client-11
答案4
tl:dr;无需卸载旧集群。相反,将以下内容放入~/.postgresqlrc
<version> <clustername> <defaultdb>
,
例如,9.6 main *
没有必要卸载旧集群。我查看了/usr/share/postgresql-common/pg_wrapper
,其中有以下几行:
# for psql we always want the latest version, as this is backwards
compatible
# to every major version that that we support
if ($cmdname eq 'pg_wrapper') {
error "pg_wrapper should not be called directly, but through a symlink";
} elsif ($cmdname =~ /^(psql|pg_archivecleanup|pg_isready)$/) {
$cmd = get_program_path ($cmdname, get_newest_version);
} else {
$cmd = get_program_path ($cmdname, $version);
}
换句话说,像这样的命令psql
将始终使用您机器上安装的最新版本运行,但像这样的命令pg_dump
则不会运行。
顶部pg_wrapper
有一条提示:
# Call a PostgreSQL client program with the version, cluster and default
# database specified in ~/.postgresqlrc or
# /etc/postgresql-common/user_clusters.
man postgresqlrc
告诉我们~/.postgresqlrc
应该这样格式化:
<version> <cluster name> <default database
pg_lsclusters
给出了以下输出:
Ver Cluster Port Status Owner Data directory Log file
9.5 main 5432 online postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
9.6 main 5433 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
这意味着我的~/.postgresqlrc
应该看起来像这样:
9.6 main *
当我运行时,它给了我所需的版本pg_dump -V
。