24

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.

8 Answers8

14

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).

10

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
  • 201
9

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
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
  • 6
  • 11
5

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
  • 151
  • 1
  • 4
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

2

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
  • 121
0

Ejecuta find / -name 'pg_dump' Resultado /usr/bin/pg_dump /usr/pgsql-9.4/bin/pg_dump

su - postgres Prueba /usr/bin/pg_dump database > database52.sql /usr/pgsql-9.4/bin/pg_dump database > database52.sql