psql和pg_dump版本不匹配

7
omnia@ubuntu:~$ psql --version
psql (PostgreSQL) 9.3.4
omnia@ubuntu:~$ pg_dump --version
pg_dump (PostgreSQL) 9.2.8
omnia@ubuntu:~$ dpkg -l | grep pg
ii  gnupg                            1.4.11-3ubuntu2.5                 GNU privacy guard - a free PGP replacement
ii  gpgv                             1.4.11-3ubuntu2.5                 GNU privacy guard - signature verification tool
ii  libgpg-error0                    1.10-2ubuntu1                     library for common error values and messages in GnuPG components
ii  libpq5                           9.3.4-1.pgdg60+1                  PostgreSQL C client library
ii  pgdg-keyring                     2013.2                            keyring for apt.postgresql.org
ii  postgresql-9.2                   9.2.8-1.pgdg60+1                  object-relational SQL database, version 9.2 server
ii  postgresql-9.3                   9.3.4-1.pgdg60+1                  object-relational SQL database, version 9.3 server
ii  postgresql-client-9.2            9.2.8-1.pgdg60+1                  front-end programs for PostgreSQL 9.2
ii  postgresql-client-9.3            9.3.4-1.pgdg60+1                  front-end programs for PostgreSQL 9.3
ii  postgresql-client-common         154.pgdg60+1                      manager for multiple PostgreSQL client versions
ii  postgresql-common                154.pgdg60+1                      PostgreSQL database-cluster manager
ii  python-gnupginterface            0.3.2-9.1ubuntu3                  Python interface to GnuPG (GPG)
ii  unattended-upgrades              0.76ubuntu1                       automatic installation of security upgrades
ii  update-manager-core              1:0.156.14.13                     manage release upgrades
omnia@ubuntu:~$ 

看起来我已经安装了两个版本,但是pg_dump卡在了一个较旧的版本?很奇怪,因为两个版本都链接到同一个“wrapper”:

omnia@ubuntu:~$ readlink /usr/bin/psql
../share/postgresql-common/pg_wrapper
omnia@ubuntu:~$ readlink /usr/bin/pg_dump
../share/postgresql-common/pg_wrapper

我做错了什么?
3个回答

17
sudo rm /usr/bin/pg_dump
sudo ln -s /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump

可以只执行 sudo ln -sf /usr/lib/postgresql/9.3/bin/pg_dump /usr/bin/pg_dump - nkamm
这将删除我的备份选项。 - Sameer Kazi
虽然这个答案可以工作,但有点粗糙,而且留下了pg_dumpall、pg_isready等问题。 - pinoyyid

7
如果您的pg_dump是符号链接到pg_wrapper,那么最好的解决方法是告诉pg_wrapper使用哪个版本。请添加:
*   *   9.6     localhost:5432     * 

/etc/postgresql-common/user_clusters添加到路径中(假设您的postmaster正在侦听localhost:5432)。

这样可以解决所有pg_命令的问题,不会破坏任何内容,并且可以很好地扩展到您可能希望安装的未来版本。

有关详细信息和其他选项,请参见man pg_wrapperman postgresqlrc

NB:此答案专门针对Debian / Ubuntu,当安装了两个版本的pg时(例如升级后),最有可能适用。


2
完美运作,比处理链接要好得多。 - gargii
如果我连本地服务器都没有怎么办?我只安装了postgresql-client。 - Jeff

0

pgdg60 的包后缀让我相信这些包不是来自官方的 Ubuntu 软件仓库。尝试查看 /etc/apt/sources.list/etc/apt/sources.list.d,看看是否有指定任何第三方 PPA 或软件源。

尝试从您的 Ubuntu 软件仓库获取 Postgresql 包(尽管这些可能会因您的 Ubuntu 版本而有所过时),或者从官方的 postgres 软件仓库获取(他们为 Ubuntu/Debian 提供了一个 apt 服务器):https://wiki.postgresql.org/wiki/Apt


很遗憾,Ubuntu的官方软件包已经过时了。 - Pablo Fernandez
1
@PabloFernandez 取决于您使用的Ubuntu版本。14.04是最新版本。无论如何,我建议尝试以下操作:apt-get remove postgresql-9.2apt-get install postgresql-9.3 - 除非您将remove替换为purge,否则不会丢失数据库数据。 - Martin Konecny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接