Wenn man z.B. bei Debian Wheezy von der Debian PostgreSQL Version (zur Zeit 9.1) auf das offizielle Repository von PostgreSQL[1] für Debian wechselt bekommt man zur Zeit Version 9.2.
Nun laufen erst einmal 2 Instanzen von PostgreSQL. Einmal 9.1 auf Port 5432 (Standardport) und 9.2 auf Port 5433. Ergo laufen auch noch alle Anwendungen die auf eine PostgresSQL Datenbank angewiesen sind.
Um auf die neue Version umzusteigen gibt es von PostgreSQL der das Upgrade völlig “automagisch” durchführt: pg_upgradecluster
pg_upgradecluster – upgrade an existing PostgreSQL cluster to a new major version.
Sinnvollerweise wechselt man jetzt per ‘su postgres’ zum PostgreSQL Benutzer. Um zu überprüfen welche “PostgreSQL Cluster” (instanzen) vorhanden sind kann man ‘pg_lsclusters’ verwenden. Die Ausgabe sieht in etwa wie folgt aus:
Ver Cluster Port Status Owner Data directory Log file
9.1 main 5432 online postgres /var/lib/postgresql/9.1/main /var/log/postgresql/postgresql-9.1-main.log
9.2 main 5433 online postgres /var/lib/postgresql/9.2/main /var/log/postgresql/postgresql-9.2-main.log
Ein einfaches ‘pg_upgradecluster 9.1 main’ reicht nun um das Upgrade durchlaufen zu lassen. Wenn man genau definieren möchte von welchem Cluster auf welches man wechseln möchte kann man das auch exakt wie folgt angeben: ‘pg_upgradecluster -v 9.2 9.1 main’
SYNOPSIS
pg_upgradecluster [-v newversion] oldversion name [newdatadir]
Nachdem ‘pg_upgradecluster’ durchgelaufen ist bietet sich ein ‘service postgresql restart’ (als root Benutzer) an und danach kann man sich wieder mit ‘pg_lsclusters’ ansehen welche PostgreSQL Instanzen laufen.
Ver Cluster Port Status Owner Data directory Log file
9.1 main 5433 down postgres /var/lib/postgresql/9.1/main /var/log/postgresql/postgresql-9.1-main.log
9.2 main 5432 online postgres /var/lib/postgresql/9.2/main /var/log/postgresql/postgresql-9.2-main.log
Jetzt kann man in Ruhe testen ob alle Anwendungen mit der neuen Version von PostgreSQL zu recht kommen. Falls dem so ist und alles funktioniert kann man optional(!) das alte Cluster per ‘pg_dropcluster 9.1 main’ löschen.
:-)
[1] http://www.postgresql.org/download/linux/debian/