Ubuntu 上的 pg_dump 版本错误

Ubuntu 上的 pg_dump 版本错误

我最初在 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

相关内容