Search code examples
postgresqlubuntuupgradeaptitude

"The database cluster was initialized with CATALOG_VERSION_NO X, but the server was compiled with CATALOG_VERSION_NO Y." after aptitude upgrade


Today I upgraded all software on Ubuntu server:

sudo aptitude upgrade

Upgrading performed not well and postgresql didn't start, with error:

alex@db:~$ sudo service postgresql start
* Starting PostgreSQL 9.5 database server[fail]
* The PostgreSQL server failed to start. Please check the log output:
2015-10-30 12:42:09 MSK FATAL:  database files are incompatible with server
2015-10-30 12:42:09 MSK DETAIL:  The database cluster was initialized with CATALOG_VERSION_NO 201507281, but the server was compiled with CATALOG_VERSION_NO 201510051.
2015-10-30 12:42:09 MSK HINT:  It looks like you need to initdb.

I don't remember, which version of postgresql was on server before upgrading, but as result of upgrading I saw only one data dir and one cluster:

alex@db:~$ ls /var/lib/postgresql/
9.5  Maildir

alex@db:~$ pg_lsclusters 
Ver Cluster Port Status Owner    Data directory               Log file
9.5 main    5432 down   postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

So it looks like it was a minor upgrade.

After copying data dir somewhere, running initdb, and aptitude upgrade again I noticed a 9.4 cluster was created:

alex@db:~$ sudo cp /var/lib/postgresql/9.5/main /var/lib/postgresql/9.5/main.old
alex@db:~$ sudo /usr/lib/postgresql/9.5/bin/initdb -D /var/lib/postgresql/9.5/main/
alex@db:~$ sudo aptitude upgrade
alex@db:~$ ls /var/lib/postgresql/
9.4  9.5  Maildir
alex@db:~$ pg_lsclusters 
Ver Cluster Port Status Owner    Data directory               Log file
9.4 main    5433 down   postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
9.5 main    5432 down   postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log

Now it works fine, but how to restore saved data from /var/lib/postgresql/9.5/main.old? pg_upgrade doesn't work. And... yes, I didn't create a backup before upgrading.

UPDATE: Contents of /etc/apt/sources.list

#######################################################################################
# Hetzner APT-Mirror
#
deb http://mirror.hetzner.de/ubuntu/packages trusty main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/packages trusty-backports main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/packages trusty-updates main restricted universe multiverse
deb http://mirror.hetzner.de/ubuntu/security trusty-security main restricted universe multiverse

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://de.archive.ubuntu.com/ubuntu/ trusty main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ trusty main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ trusty-updates main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ trusty-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ trusty universe
deb-src http://de.archive.ubuntu.com/ubuntu/ trusty universe
deb http://de.archive.ubuntu.com/ubuntu/ trusty-updates universe
deb-src http://de.archive.ubuntu.com/ubuntu/ trusty-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## team, and may not be under a free licence. Please satisfy yourself as to 
## your rights to use the software. Also, please note that software in 
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://de.archive.ubuntu.com/ubuntu/ trusty multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ trusty multiverse
deb http://de.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ trusty-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu trusty-security main restricted
deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted
deb http://security.ubuntu.com/ubuntu trusty-security universe
deb-src http://security.ubuntu.com/ubuntu trusty-security universe
deb http://security.ubuntu.com/ubuntu trusty-security multiverse
deb-src http://security.ubuntu.com/ubuntu trusty-security multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu trusty partner
# deb-src http://archive.canonical.com/ubuntu trusty partner

## Uncomment the following two lines to add software from Ubuntu's
## 'extras' repository.
## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
# deb http://extras.ubuntu.com/ubuntu trusty main
# deb-src http://extras.ubuntu.com/ubuntu trusty main

deb http://packages.elasticsearch.org/elasticsearch/1.4/debian stable main

UPDATE2:

alex@db:~$ sudo dpkg -l postgresql\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                                      Version                           Architecture                      Description
+++-=========================================================-=================================-=================================-=======================================================================================================================
ii  postgresql                                                9.4+170.pgdg14.04+1               all                               object-relational SQL database (supported version)
un  postgresql-7.4                                            <none>                            <none>                            (no description available)
un  postgresql-8.0                                            <none>                            <none>                            (no description available)
un  postgresql-9.1                                            <none>                            <none>                            (no description available)
ii  postgresql-9.3                                            9.3.10-1.pgdg14.04+1              amd64                             object-relational SQL database, version 9.3 server
ii  postgresql-9.4                                            9.4.5-1.pgdg14.04+1               amd64                             object-relational SQL database, version 9.4 server
ii  postgresql-9.5                                            9.5~beta1-1.pgdg14.04+1           amd64                             object-relational SQL database, version 9.5 server
un  postgresql-client                                         <none>                            <none>                            (no description available)
ii  postgresql-client-9.3                                     9.3.10-1.pgdg14.04+1              amd64                             front-end programs for PostgreSQL 9.3
ii  postgresql-client-9.4                                     9.4.5-1.pgdg14.04+1               amd64                             front-end programs for PostgreSQL 9.4
ii  postgresql-client-9.5                                     9.5~beta1-1.pgdg14.04+1           amd64                             front-end programs for PostgreSQL 9.5
ii  postgresql-client-common                                  170.pgdg14.04+1                   all                               manager for multiple PostgreSQL client versions
ii  postgresql-common                                         170.pgdg14.04+1                   all                               PostgreSQL database-cluster manager
ii  postgresql-contrib                                        9.4+170.pgdg14.04+1               all                               additional facilities for PostgreSQL (supported version)
ii  postgresql-contrib-9.3                                    9.3.10-1.pgdg14.04+1              amd64                             additional facilities for PostgreSQL
ii  postgresql-contrib-9.4                                    9.4.5-1.pgdg14.04+1               amd64                             additional facilities for PostgreSQL
ii  postgresql-contrib-9.5                                    9.5~beta1-1.pgdg14.04+1           amd64                             additional facilities for PostgreSQL
ii  postgresql-doc                                            9.4+170.pgdg14.04+1               all                               documentation for the PostgreSQL database management system
ii  postgresql-doc-9.3                                        9.3.10-1.pgdg14.04+1              all                               documentation for the PostgreSQL database management system
ii  postgresql-doc-9.4                                        9.4.5-1.pgdg14.04+1               all                               documentation for the PostgreSQL database management system
un  postgresql-doc-9.5                                        <none>                            <none>                            (no description available)
ii  postgresql-server-dev-9.3                                 9.3.10-1.pgdg14.04+1              amd64                             development files for PostgreSQL 9.3 server-side programming


alex@db:~$ sudo apt-cache policy postgresql-9.5
postgresql-9.5:
  Installed: 9.5~beta1-1.pgdg14.04+1
  Candidate: 9.5~beta1-1.pgdg14.04+1
  Version table:
 *** 9.5~beta1-1.pgdg14.04+1 0
        500 http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg/main amd64 Packages
        100 /var/lib/dpkg/status

Solution

  • You are/were using an alpha release of the database, which is explicitly documented as not remaining format-stable. It looks like it might've been a bit too easy to install without realising that, though; I've mailed the apt packaging team about that.


    Update: you must've explicitly done an aptitude install postgresql-9.5 and either used --force when originally installing or added 9.5 to your sources.list entry manually. The 9.5 packages are not installed by default, and take extra steps to install. See:

    I updated the wiki with a warning note, in case you followed those instructions without realising about the format change. Though I'd think using a prerelease database with data you care about would be something that's obviously not a great idea, really.


    If you need to read the old data, you'll need to download the particular version you were running then, install that, and use it to dump the database(s). Then you can restore them to the new copy.

    I strongly advise you to dump your data, then restore it to PostgreSQL 9.4, and keep using that until 9.5.0 comes out or at least until a beta is released. After beta the PostgreSQL team tries hard to avoid changing the format.


    Update: You're running 9.5~beta1-1.pgdg14.04+1 now, so I'm pretty sure it's the 9.5alpha2 to 9.5beta1 update that broke things. Which makes sense.

    So what we need to do is find the 9.5alpha1 version, then force a downgrade. Note that this will stop you from being able to access your 9.5beta2 database until you upgrade again, so I suggest dumping it first.

    From the version it's clear it's a PGDG release, i.e. a release from apt.postgresql.org (run by the PostgreSQL Development Group). Examining http://apt.postgresql.org/pub/repos/apt/dists/trusty-pgdg/9.5/binary-amd64/Packages shows us the current package-list, and the alpha is not in it. That's to be expected, since it's no longer a current release, but it means you can't download it from that repo directly. However, it's also not in trusty-pgdg-testing, and it's not in the package pool at http://apt.postgresql.org/pub/repos/apt/pool/main/p/postgresql-9.5/ either.

    In other words, the alpha has been removed from the repository completely, and is no longer available for download from apt.postgresql.org.

    First, check if you still have the alpha in your /var/cache/apt/archives. If you do, copy everything with alpha2 in its name to a separate location now.

    If you don't, your options are to compile it yourself, or ask on the mailing list if anyone still has the packages.