Datenbank Cluster Verzeichnis in der falschen Version vorhanden

magpie

Benutzer
Beiträge
14
Ich hatte Postgres 11.5 installiert. Durch ein Systemupdate (Manjaro Linux) wurde automatisch die Version 12 eingespielt. Postgres ist danach nicht mehr gestartet, da das Cluster Verzeichnis nicht kompatibel ist. Ich habe dann wieder die Version 11.5 installiert, um das Upgrade sauber durchzuführen. Leider meldet mir das Systm nun, dass der Cluster nicht mit der aktuellen Version kompatibel ist. Es kommt die Meldung :
2019-12-18 23:20:47.082 CET [2257] DETAIL: Der Datenbank-Cluster wurde mit PG_CONTROL_VERSION 1201 initialisiert, aber der Server wurde mit PG_CONTROL_VERSION 1100 kompiliert.

In der Datei PG_VERSION steht: 11

Kann ich die Situation irgendwie retten?

Gruss
Martin
 
Werbung:
was ist denn jetzt das data_directory? Steht da im Pfad eine Versionskennung drin? Suche mal nach allen Versionen von pg_ctl und pg_controldata.

Und ja: Backup liegt bereit?
 
Das aktuelle data_directory ist /var/lib/postgres/data. Manjaro Linux legt keine Versionsverzeichnisse bei der Installation von Postgres an. Leider.

Code:
/usr/bin/pg_ctl
/usr/share/locale/cs/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/de/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/es/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/fr/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/he/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/it/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/ja/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/ko/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/pl/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/pt_BR/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/ru/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/sv/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/tr/LC_MESSAGES/pg_ctl-11.mo
/usr/share/locale/zh_CN/LC_MESSAGES/pg_ctl-11.mo
/usr/share/man/man1/pg_ctl.1.gz
/bin/pg_ctl

Code:
/usr/bin/pg_controldata
/usr/lib/postgresql/bitcode/postgres/utils/misc/pg_controldata.bc
/usr/share/locale/cs/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/de/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/es/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/fr/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/it/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/ja/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/ko/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/pl/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/pt_BR/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/ru/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/sv/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/tr/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/vi/LC_MESSAGES/pg_controldata-11.mo
/usr/share/locale/zh_CN/LC_MESSAGES/pg_controldata-11.mo
/usr/share/man/man1/pg_controldata.1.gz
/bin/pg_controldata

Ich habe ein Backup welches nicht ganz aktuell ist. Es ist keine produktive Datenbank. Ich bin dabei eine zu erstellen und es existiert eigentlich nur das Schema. Ich kann mit dem Backup weiterarbeiten, wenn ich die Situation aber retten kann wäre mir das lieber. Ich muss in Zukunft öfters ein Backup machen und bei Postgres die automatischen Backups deaktivieren :)
 
Ok ich habe herausgefunden wie Manjaro dies mit der Vorgängerversion löst und habe nun folgende Installation
Code:
/opt/pgsql-11/bin/pg_ctl
/usr/bin/pg_ctl
/usr/share/locale/cs/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/de/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/es/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/fr/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/he/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/it/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/ja/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/ko/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/pl/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/ru/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/sv/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/tr/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/uk/LC_MESSAGES/pg_ctl-12.mo
/usr/share/locale/zh_CN/LC_MESSAGES/pg_ctl-12.mo
/usr/share/man/man1/pg_ctl.1.gz
/bin/pg_ctl

Code:
/opt/pgsql-11/bin/pg_controldata
/usr/bin/pg_controldata
/usr/lib/postgresql/bitcode/postgres/utils/misc/pg_controldata.bc
/usr/share/locale/cs/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/de/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/es/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/fr/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/it/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/ja/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/ko/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/pl/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/ru/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/sv/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/tr/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/uk/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/vi/LC_MESSAGES/pg_controldata-12.mo
/usr/share/locale/zh_CN/LC_MESSAGES/pg_controldata-12.mo
/usr/share/man/man1/pg_controldata.1.gz
/bin/pg_controldata

Gemäss der Anleitung von Manjaro PostgreSQL - ArchWiki habe ich alles vorbereitet. Mit dem Befehl
Code:
[postgres]$ pg_upgrade -b /opt/pgsql-11/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data
kommt aber folgende Fehlermeldung
Code:
[postgres@fenja tmp]$ pg_upgrade -b /opt/pgsql-11/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data
Führe Konsistenzprüfungen durch
-------------------------------
Checking cluster versions                                   ok
pg_resetwal: pg_control exists but is broken or wrong version; ignoring it

*failure*
Prüfen Sie die letzten Zeilen von »pg_upgrade_server.log« für den
wahrscheinlichen Grund für das Scheitern.

Verbindung zur Datenbank fehlgeschlagen: konnte nicht mit dem Server verbinden: Datei oder Verzeichnis nicht gefunden
    Läuft der Server lokal und akzeptiert er Verbindungen
    auf dem Unix-Domain-Socket »/var/lib/postgres/tmp/.s.PGSQL.50432«?

konnte nicht mit dem Postmaster für den alten Cluster verbinden, gestartet mit dem Befehl:
"/opt/pgsql-11/bin/pg_ctl" -w -l "pg_upgrade_server.log" -D "/var/lib/postgres/olddata" -o "-p 50432 -b  -c listen_addresses='' -c unix_socket_permissions=0700 -c unix_socket_directories='/var/lib/postgres/tmp'" start
Fehlgeschlagen, Programm wird beendet

Irgendwie hat er das data_verzeichnis zerschossen
 
Werbung:
die gezeigten Dateien gehören eher NICHT zu PostgreSQL...

Egal. Wenn es nicht produktiv ist ist es auch egal. Zum Thema "öfters ein Backup machen": man kann Backups kontinuierlich machen , um dann in der Lage zu sein, ein Point-In-Time-Recovery machen zu können. Schaue Dir einfach mal unser Barman (Barman) an, das macht exakt sowas. In "produktiven" Umgebungen sollte sowas Pflicht sein.

Situation retten: vermutlich hast Du jetzt 2 Versionen installiert. Diese sollten in 2 unterschiedlichen Verzeichnissen sein (sowohl die Binaries als auch die Daten). Das ist jetzt an Dir, das zu prüfen.
 
Zurück
Oben