Postgres-Upgrade-Erfolgsschleife aufgrund vorheriger Postgres-8- bis 10-Migration

In einer Schleife von:

Um das Upgrade abzuschließen, führen Sie erneut einen Neuaufbau durch mit: ./launcher rebuild app

Ich muss etwas übersehen haben. Der vollständige Log steht unten. Danke für jede Hilfe.

root@discuss:/var/discourse# ./launcher rebuild app
Sicherstellen, dass der Launcher auf dem neuesten Stand ist
Origin abrufen
Launcher ist auf dem neuesten Stand
Alten Container stoppen
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Bereits auf dem neuesten Stand.
I, [2020-05-26T20:43:00.459915 #1]  INFO -- : Laden von --stdin
I, [2020-05-26T20:43:00.466076 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-05-26T20:43:00.497010 #1]  INFO -- : Erstellen von Lokalen (dies kann eine Weile dauern)...
Erstellung abgeschlossen.

I, [2020-05-26T20:43:00.497661 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-05-26T20:43:00.500629 #1]  INFO -- :
I, [2020-05-26T20:43:00.501124 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-05-26T20:43:00.503417 #1]  INFO -- :
I, [2020-05-26T20:43:00.503867 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-05-26T20:43:00.505796 #1]  INFO -- :
I, [2020-05-26T20:43:00.506199 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-05-26T20:43:00.508341 #1]  INFO -- :
I, [2020-05-26T20:43:00.508752 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-05-26T20:43:00.510785 #1]  INFO -- :
I, [2020-05-26T20:43:00.511166 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres läuft bereits, Container stoppen ; exit 1
2020/05/26 20:43:00 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Datei oder Verzeichnis nicht gefunden
I, [2020-05-26T20:43:00.515245 #1]  INFO -- :
I, [2020-05-26T20:43:00.515542 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-05-26T20:43:00.518166 #1]  INFO -- :
I, [2020-05-26T20:43:00.518509 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-05-26T20:43:00.520876 #1]  INFO -- :
I, [2020-05-26T20:43:00.521215 #1]  INFO -- : > mkdir -p /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-05-26T20:43:00.523438 #1]  INFO -- :
I, [2020-05-26T20:43:00.523931 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-05-26T20:43:00.526034 #1]  INFO -- :
I, [2020-05-26T20:43:00.530519 #1]  INFO -- : Datei > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-05-26T20:43:00.534602 #1]  INFO -- : Datei > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-05-26T20:43:00.538528 #1]  INFO -- : Datei > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-05-26T20:43:00.542481 #1]  INFO -- : Datei > /root/upgrade_postgres  chmod: +x  chown:
I, [2020-05-26T20:43:00.542896 #1]  INFO -- : > chown -R root /var/lib/postgresql/12/main
I, [2020-05-26T20:43:00.638174 #1]  INFO -- :
I, [2020-05-26T20:43:00.638520 #1]  INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/12/bin/initdb -D /shared/postgres_data || exit 0
I, [2020-05-26T20:43:00.640938 #1]  INFO -- :
I, [2020-05-26T20:43:00.641292 #1]  INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2020-05-26T20:43:00.672801 #1]  INFO -- :
I, [2020-05-26T20:43:00.673456 #1]  INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2020-05-26T20:43:00.676098 #1]  INFO -- :
I, [2020-05-26T20:43:00.676587 #1]  INFO -- : > /root/upgrade_postgres
initdb: Warnung: „trust“-Authentifizierung für lokale Verbindungen aktiviert
Dies können Sie ändern, indem Sie pg_hba.conf bearbeiten oder beim nächsten Aufruf von initdb die Option -A bzw. --auth-local und --auth-host verwenden.
debconf: Paketkonfiguration wird verzögert, da apt-utils nicht installiert ist
mv: kann '/shared/postgres_data' nicht nach '/shared/postgres_data_old/postgres_data' verschieben: Verzeichnis nicht leer
mv: kann '/shared/postgres_data_new' nicht nach '/shared/postgres_data/postgres_data_new' verschieben: Verzeichnis nicht leer
I, [2020-05-26T20:43:15.530374 #1]  INFO -- : Upgrade von PostgreSQL von Version 10 auf 12
Die Dateien dieses Datenbanksystems werden vom Benutzer „postgres“ besessen.
Dieser Benutzer muss auch den Serverprozess besitzen.

Das Datenbankcluster wird mit der Lokale „en_US.UTF-8“ initialisiert.
Die Standard-Datenbankkodierung wurde entsprechend auf „UTF8“ gesetzt.
Die Standardkonfiguration für die Textsuche wird auf „englisch“ gesetzt.

Prüfsummen für Datenseiten sind deaktiviert.

Berechtigungen für bestehendes Verzeichnis /shared/postgres_data_new werden korrigiert ... ok
Unterverzeichnisse werden erstellt ... ok
Implementierung für dynamischen gemeinsamen Speicher wird ausgewählt ... posix
Standard für max_connections wird ausgewählt ... 100
Standard für shared_buffers wird ausgewählt ... 128MB
Standard-Zeitzone wird ausgewählt ... Etc/UTC
Konfigurationsdateien werden erstellt ... ok
Bootstrap-Skript wird ausgeführt ... ok
Nach-Bootstrap-Initialisierung wird durchgeführt ... ok
Daten werden auf Festplatte synchronisiert ... ok


Erfolg. Sie können den Datenbankserver jetzt mit folgendem Befehl starten:

/usr/lib/postgresql/12/bin/pg_ctl -D /shared/postgres_data_new -l logfile start

Getroffen:1 http://deb.debian.org/debian buster InRelease
Abrufen:2 http://security.debian.org/debian-security buster/updates InRelease [65,4 kB]
Abrufen:3 http://deb.debian.org/debian buster-updates InRelease [49,3 kB]
Abrufen:4 http://apt.postgresql.org/pub/repos/apt buster-pgdg InRelease [84,6 kB]
Abrufen:5 http://security.debian.org/debian-security buster/updates/main amd64 Pakete [201 kB]
Getroffen:6 https://deb.nodesource.com/node_10.x buster InRelease
Abrufen:7 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 Pakete [171 kB]
571 kB in 1 Sek. abgerufen (810 kB/s)
Paketlisten werden gelesen...
Paketlisten werden gelesen...
Abhängigkeitsbaum wird aufgebaut...
Statusinformationen werden gelesen...
Folgende zusätzliche Pakete werden installiert:
  postgresql-client-10
Vorgeschlagene Pakete:
  postgresql-doc-10
Folgende NEUE Pakete werden installiert:
  postgresql-10 postgresql-client-10
0 aktualisiert, 2 neu installiert, 0 zu entfernen und 9 nicht aktualisiert.
Es müssen 6.390 kB aus den Archiven heruntergeladen werden.
Nach diesem Vorgang werden 30,6 MB zusätzlicher Festplattenspeicher belegt.
Abrufen:1 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-client-10 amd64 10.13-1.pgdg100+1 [1.428 kB]
Abrufen:2 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-10 amd64 10.13-1.pgdg100+1 [4.961 kB]
6.390 kB in 2 Sek. abgerufen (4.017 kB/s)
Auswahl des zuvor nicht ausgewählten Pakets postgresql-client-10.
(Datenbank wird gelesen ... 43929 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereiten zum Entpacken von .../postgresql-client-10_10.13-1.pgdg100+1_amd64.deb ...
Entpacken von postgresql-client-10 (10.13-1.pgdg100+1) ...
Auswahl des zuvor nicht ausgewählten Pakets postgresql-10.
Vorbereiten zum Entpacken von .../postgresql-10_10.13-1.pgdg100+1_amd64.deb ...
Entpacken von postgresql-10 (10.13-1.pgdg100+1) ...
Einrichten von postgresql-client-10 (10.13-1.pgdg100+1) ...
update-alternatives: Warnung: Erzwingen der Neuinstallation der Alternative /usr/share/postgresql/12/man/man1/psql.1.gz, da die Verknüpfungsgruppe psql.1.gz defekt ist
Einrichten von postgresql-10 (10.13-1.pgdg100+1) ...
Erstellen eines neuen PostgreSQL-Clusters 10/main ...
/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5
Die Dateien dieses Datenbanksystems werden vom Benutzer „postgres“ besessen.
Dieser Benutzer muss auch den Serverprozess besitzen.

Das Datenbankcluster wird mit der Lokale „C.UTF-8“ initialisiert.
Die Standard-Datenbankkodierung wurde entsprechend auf „UTF8“ gesetzt.
Die Standardkonfiguration für die Textsuche wird auf „englisch“ gesetzt.

Prüfsummen für Datenseiten sind deaktiviert.

Berechtigungen für bestehendes Verzeichnis /var/lib/postgresql/10/main werden korrigiert ... ok
Unterverzeichnisse werden erstellt ... ok
Standard für max_connections wird ausgewählt ... 100
Standard für shared_buffers wird ausgewählt ... 128MB
Standard-Zeitzone wird ausgewählt ... Etc/UTC
Implementierung für dynamischen gemeinsamen Speicher wird ausgewählt ... posix
Konfigurationsdateien werden erstellt ... ok
Bootstrap-Skript wird ausgeführt ... ok
Nach-Bootstrap-Initialisierung wird durchgeführt ... ok
Daten werden auf Festplatte synchronisiert ... ok

Erfolg. Sie können den Datenbankserver jetzt mit folgendem Befehl starten:

pg_ctlcluster 10 main start

Warnung: Das ausgewählte stats_temp_directory /var/run/postgresql/10-main.pg_stat_tmp
ist für den Cluster-Besitzer nicht beschreibbar. Diese Einstellung wird nicht in
postgresql.conf aufgenommen.
Ver Cluster Port Status Owner    Datenverzeichnis              Logdatei
10  main    5433 down   postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
update-alternatives: Warnung: Erzwingen der Neuinstallation der Alternative /usr/share/postgresql/12/man/man1/postmaster.1.gz, da die Verknüpfungsgruppe postmaster.1.gz defekt ist
invoke-rc.d: konnte aktuellen Runlevel nicht bestimmen
invoke-rc.d: policy-rc.d verweigerte die Ausführung von start.
Auslösen von Triggern für postgresql-common (213.pgdg100+1) ...
PostgreSQL-Wörterbücher werden aus installierten myspell/hunspell-Paketen erstellt...
Veraltete Wörterbuchdateien werden entfernt:
PostgreSQL 10-Datenbankserver stoppen: main.
PostgreSQL 12-Datenbankserver stoppen: main.
Konsistenzprüfungen werden durchgeführt
-----------------------------
Cluster-Versionen werden geprüft                                   ok
Datenbankbenutzer ist der Installationsbenutzer                  ok
Datenbankverbindungseinstellungen werden geprüft                       ok
Auf vorbereitete Transaktionen wird geprüft                          ok
Auf reg*-Datentypen in Benutzer-Tabellen wird geprüft                 ok
Auf contrib/isn mit Fehlanpassung bei bigint-Weitergabe wird geprüft       ok
Auf Tabellen MIT OIDS wird geprüft                               ok
Auf ungültige Benutzer-Spalten vom Typ „sql_identifier“ wird geprüft          ok
Dump globaler Objekte wird erstellt                             ok
Dump von Datenbankschemata wird erstellt
  discourse
  postgres
  template1
                                                        ok
Auf Vorhandensein erforderlicher Bibliotheken wird geprüft                 ok
Datenbankbenutzer ist der Installationsbenutzer                  ok
Auf vorbereitete Transaktionen wird geprüft                          ok

Wenn pg_upgrade nach diesem Punkt fehlschlägt, müssen Sie das
neue Cluster vor dem Fortfahren erneut mit initdb initialisieren.

Upgrade wird durchgeführt
------------------
Alle Zeilen im neuen Cluster werden analysiert                       ok
Alle Zeilen im neuen Cluster werden eingefroren                        ok
Dateien aus neuem pg_xact werden gelöscht                             ok
Altes pg_xact wird auf neuen Server kopiert                           ok
Nächste Transaktions-ID und Epoche für neues Cluster werden gesetzt       ok
Dateien aus neuem pg_multixact/offsets werden gelöscht                ok
Altes pg_multixact/offsets wird auf neuen Server kopiert              ok
Dateien aus neuem pg_multixact/members werden gelöscht                ok
Altes pg_multixact/members wird auf neuen Server kopiert              ok
Nächste Multixact-ID und Offset für neues Cluster werden gesetzt        ok
WAL-Archive werden zurückgesetzt                                      ok
frozenxid- und minmxid-Zähler im neuen Cluster werden gesetzt       ok
Globale Objekte im neuen Cluster werden wiederhergestellt                 ok
Datenbankschemata im neuen Cluster werden wiederhergestellt
  template1
  discourse
  postgres
                                                        ok
Benutzer-Relationsdateien werden kopiert
  /shared/postgres_data/base/16400/2613
  /shared/postgres_data/base/16400/2683
  /shared/postgres_data/base/16400/16728
  /shared/postgres_data/base/16400/16728_fsm
  /shared/postgres_data/base/16400/16728_vm
  /shared/postgres_data/base/16400/16731
  /shared/postgres_data/base/16400/84163
  /shared/postgres_data/base/16400/84163_fsm
  /shared/postgres_data/base/16400/84163_vm
……
                                                        ok
Nächste OID für neues Cluster wird gesetzt                            ok
Datenverzeichnis wird auf Festplatte synchronisiert                                 ok
Skript zum Analysieren des neuen Clusters wird erstellt                      ok
Skript zum Löschen des alten Clusters wird erstellt                      ok

Upgrade abgeschlossen
----------------
Optimierer-Statistiken werden von pg_upgrade nicht übertragen, daher
sollten Sie nach dem Start des neuen Servers Folgendes ausführen:
./analyze_new_cluster.sh

Die Ausführung dieses Skripts löscht die Datendateien des alten Clusters:
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE VON POSTGRES ABGESCHLOSSEN

Altes Datenbankverzeichnis 10 wird unter /shared/postgres_data_old gespeichert

Um das Upgrade abzuschließen, führen Sie erneut einen Neuaufbau durch mit:

./launcher rebuild app
-------------------------------------------------------------------------------------

Es scheint, als wären seit dem letzten Upgrade vor zwei Jahren noch einige Dateien übrig geblieben:

mv: cannot move '/shared/postgres_data' to '/shared/postgres_data_old/postgres_data': Directory not empty
mv: cannot move '/shared/postgres_data_new' to '/shared/postgres_data/postgres_data_new': Directory not empty

Kannst du diese Dateien vor dem Neuaufbau woandershin verschieben?

Das war’s! Danke, @Falco.

Danke, ich habe dies zur FAQ hinzugefügt. Ich werde auch eine Erkennung für diesen Zustand in das Upgrade-Skript integrieren.