17

I originally installed postgres 9.2 on Ubuntu and later upgraded to 9.3 according to the instructions here: http://www.postgresql.org/download/linux/ubuntu/ (using the postgres apt repository).

However, pg_dump, which is an alias for /usr/share/postgresql-common/pg_wrapper, did not get upgraded.

pg_dump: server version: 9.3.4; pg_dump version: 9.2.8
pg_dump: aborting because of server version mismatch

How do I upgrade this? I have tried to figure out which packages require update, but I'm not really even sure that that's the correct thing to do.

BillRobertson42
  • 371
  • 1
  • 2
  • 11

7 Answers7

13

Turns out that installing the 9.3 client does not auto uninstall the 9.2 client, and if they're both on the machine like this, then that's what you get. The answer is to remove the postgresql-client-9.2 (or whatever the appropriate old version is in your case).

BillRobertson42
  • 371
  • 1
  • 2
  • 11
  • 3
    For upgrading client: Add the postgresql repo like this http://www.postgresql.org/download/linux/ubuntu/ Then run `apt-cache search postgresql-client-9`and pick whichever suits your needs. – Gesias Feb 20 '15 at 14:54
  • 1
    You might want to also know that upgrading `pg_dump` first requires `apt-get --only-upgrade install postgresql-client` after which you have to uninstall the previous client version: `apt-get --purge remove postgresql-client-9.2`, for example. – sameers Jan 27 '16 at 06:05
7

If you need to have several versions of postgresql client same time you may use

pg_dump --cluster 9.2/main [other pg_dump options]

for old cluster and

pg_dump --cluster 9.3/main [other pg_dump options]

for new

View accepted answer on askubuntu for details: https://askubuntu.com/a/647341/1044581

shooma
  • 171
  • 1
  • 4
6

you may want to check output of the command

dpkg -l | grep postgres

to see which versions are installed and active pg_dump is usually part of postgresql-client-common package.

(And edit your question, It is not clear how did you upgrade from version 9.3 to 9.3 ... )

stimur
  • 894
  • 5
  • 11
6

I managed to fix my issues by uninstalling the postgresql client

sudo apt-get remove postgresql-client-common

And then re-installing

  sudo apt-get install postgresql-client-11
ThatDataGuy
  • 173
  • 1
  • 5
  • 1
    E: Unable to locate package postgresql-client-11 ... is there some way to update the postgres index – Alexander Mills Aug 08 '19 at 23:36
  • I believe that you might need to update your apt indexes, as I don't know if postgresql package is part of the default index set. try googling 'install postgresql 11 on ubuntu' for more details. – ThatDataGuy Aug 09 '19 at 07:36
  • Here is an explicit link to installing postgresql 11 client tools: https://computingforgeeks.com/install-postgresql-11-on-ubuntu-linux/ – nsof Jul 05 '20 at 09:16
  • You might need to add a repository for the latest prostgres versions: https://www.postgresql.org/download/linux/ubuntu/ – Sebastian Dec 16 '21 at 10:26
3

I was also facing same issue. First, I removed old pgdump versions. Mostly it is part of postres-client. So, remove them by using

apt-get remove postgresql-client-common

Install the version as per your requirement, by executing following commands. I am using ubuntu 16.04. Replace, "xenial" by your ubuntu version, in the first command. Command to check ubuntu version-
cat /etc/os-release

$ echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" > /etc/apt/sources.list.d/pgdg.list
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ apt-cache search postgresql | grep postgresql-client
$ apt-get install postgresql-client-9.5

1

To use a specific version of pg_dump

/usr/lib/postgresql/13/bin/pg_dump

You can also run find / -name 'pg_dump' to find available paths

result of command

Madacol
  • 111
  • 2
1

tl:dr; no need to uninstall old clusters. Instead, put the following in ~/.postgresqlrc

<version> <clustername> <defaultdb>,

e.g., 9.6 main *


It's not necessary to uninstall old clusters. I looked in /usr/share/postgresql-common/pg_wrapper, which has these lines:

# 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);
}

In other words, commands like psql will always be run with the latest installed version installed on your machine, but commands like pg_dump will not.

At the top of pg_wrapper is a hint:

# Call a PostgreSQL client program with the version, cluster and default
# database specified in ~/.postgresqlrc or
# /etc/postgresql-common/user_clusters.

man postgresqlrc tells us that ~/.postgresqlrc should be formatted thusly:

<version> <cluster name> <default database

pg_lsclusters gave me the following output:

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

Which meant that my ~/.postgresqlrc should look like this:

9.6 main *

Which gives me the desired version when I run pg_dump -V.

deargle
  • 111
  • 4