Univention Bugzilla – Bug 27874
update von postgres-8.3 auf postgresql-8.4
Last modified: 2012-12-12 21:08:11 CET
Das sollte einmal getestet/beschrieben werden. Bei der Installation von postgresql-8.4 (auf einem von 2.4 aktualisiertem System mit postgres-8.3) wird keine cluster für 8.4 angelegt. Das postinst Script sowie die pg_* Tools gehen wohl davon aus, dass es noch keine Konfig für diese Version gibt: -> /usr/bin/pg_createcluster -u postgres 8.4 main Error: cluster configuration already exists Im postinst wird der cluster nur angelegt, wenn if [ ! -d "/etc/postgresql/$VERSION" ] || \ [ -z "$(ls /etc/postgresql/$VERSION)" ] || \ [ -z "$(ls /etc/postgresql/$VERSION/*/postgresql.conf 2>/dev/null)" ]; then Das führt dann dazu, das kein cluser für 8.4 angelegt wird. Dann wird postgres gestartet /etc/init.d/postgresql start Starting PostgreSQL 8.3 database server: main. Starting PostgreSQL 8.4 database server: mainError: /var/lib/postgresql/8.4/main is not accessible or does not exist ... failed! failed! Dabei werden alle Versionen geprüft und gestartet (richtig gestartet wird nur die Version, in deren /etc/postgresql/VERSION/main/start.conf "auto" steht). Aber der fehlende Cluster führt eben zum einem Fehler. Wenn man vor der Installation von postgresql-8.4 die pg_hba.conf, pg_ident.conf und postgresql.conf aus /etc/postgresql/8.4/main/ klappt es. Dann wird nach der Installtion immer noch 8.3 gestartet. Man kann dann mit -> pg_upgradecluster 8.3 main den cluster aktualisieren (auf 8.4) und anschließend wird nur noch 8.4 gestartet.
Getestet im Rahmen von Bug #26100: Nach dem Update von 2.4 auf 3.0 ist, wenn die pkgdb installiert war, postgresql-8.3 installiert. Eine nachträgliche Installation von postgresql-8.4 funktioniert nicht: postgresql-8.4 (8.4.10-0.8.201201111543) wird eingerichtet ... Starting PostgreSQL 8.4 database server: mainError: /var/lib/postgresql/8.4/main is not accessible or does not exist ... failed! failed! invoke-rc.d: initscript postgresql, action "start" failed. dpkg: Fehler beim Bearbeiten von postgresql-8.4 (--configure): Unterprozess installiertes post-installation-Skript gab den Fehlerwert 1 zurück Dies liegt daran, dass univention-postgresql schon Konfiguration unter /etc/postgresql/8.4/main mitbringt, aber der dort referenzierte Cluster (/var/lib/postgresql/8.4/main) nicht existiert. Als Workaround kann die Konfiguration gelöscht werden: rm -r /etc/postgresql/8.4/ und dann das Paket installiert werden: univention-install postgresql-8.4 Dabei wird dann ein neuer Cluster angelegt. Danach kann die Konfiguration wieder aus dem Template generiert werden: ucr commit /etc/postgresql/8.4/main/* Da vom Template der gleiche Port für 8.3 und 8.4 vergeben wird startet der 8.4 Server nicht: # invoke-rc.d postgresql restart Restarting PostgreSQL 8.3 database server: main. Restarting PostgreSQL 8.4 database server: mainError: Port conflict: another instance is already running on /var/run/postgresql with port 5432 ... failed! failed! invoke-rc.d: initscript postgresql, action "restart" failed. Das muss manuell in den /etc/postgresql/*/*/postgresql.conf angepasst werden. (Die automatisch bei der postgresql-8.4 Installation erstellte Konfiguration hat hier 5433 (==5432+1)) Dann starten und laufen beide Versionen gleichzeitig: # invoke-rc.d postgresql restart Restarting PostgreSQL 8.3 database server: main. Restarting PostgreSQL 8.4 database server: main. # netstat -4tlpn|grep postgres tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 5753/postgres tcp 0 0 0.0.0.0:5433 0.0.0.0:* LISTEN 5802/postgres Alternativ kann über die /etc/postgresql/*/*/start.conf gesteuert werden welcher Cluster startet. Zur Lösung könnte univention-postgresql: * die Konfigurationsdateien nur für installierte PostgreSQL-Versionen erzeugen * die Ports ohne Konflikte vergeben Alternativ könnte univention-postgresql: * durch Paketabhängigkeiten dafür sorgen dass immer nur eine (univention-)postgresql-Version installiert ist. Oder es könnte: * die zu startende Version per UCR auswählbar machen und dies über die /etc/postgresql/*/*/start.conf umsetzen
Ich habe einen Artikel mit einer Update Anleitung in der SDB erstellt. Univention Corporate Server (UCS)-> Installation -> Aktualisierung von PostgreSQL 8.3 auf PostgreSQL 8.4 Wenn die QA durch und erfolgreich ist, muss der Artikel noch freigeschaltet werden.
(In reply to comment #3) > Ich habe einen Artikel mit einer Update Anleitung in der SDB erstellt. > > Univention Corporate Server (UCS)-> Installation -> Aktualisierung von > PostgreSQL > 8.3 auf PostgreSQL 8.4 Der Artikel sieht gut aus, die Anleitung funktioniert. > Wenn die QA durch und erfolgreich ist, muss der Artikel noch freigeschaltet > werden. Kann freigeschaltet werden.
(In reply to comment #4) > (In reply to comment #3) > > Wenn die QA durch und erfolgreich ist, muss der Artikel noch freigeschaltet > > werden. > Kann freigeschaltet werden. http://sdb.univention.de/content/2/208/de/aktualisierung-von-postgresql-83-auf-postgresql-84.html
UCS 3.1-0 has been released: http://forum.univention.de/viewtopic.php?f=54&t=2125 If this error occurs again, please use "Clone This Bug".