PostgreSQL®-Hauptversionsaktualisierung
Diese Anleitung beschreibt die schrittweise Durchführung eines Hauptversions-Upgrades einer PostgreSQL®-Datenbank unter Windows und Linux. Sie enthält wichtige Hinweise zur Datensicherung, zur Vorbereitung der Umgebung sowie zur Ausführung und Nachbereitung des Upgrade-Prozesses.
- Installieren Sie die neue PostgreSQL®-Version (deinstallieren Sie die aktuelle
Version nicht, beide werden für den Upgrade-Prozess benötigt)
Wichtig:Es wird dringend empfohlen, vor der Aktualisierung der Version eine vollständige Sicherungskopie der Datenbank zu erstellen, damit versehentlich gelöschte Daten wiederhergestellt werden können.Anmerkung:Sie können die Indizes der PostgreSQL®-Datenbank vor oder nach dem Upgrade von BRIN auf BTREE ändern. Siehe Kapitel PostgreSQL®-Schema. Beachten Sie, dass die Statistiken der Datenbank neu erstellt werden müssen. - siehe Schritt 13.
- Schließen Sie alle Programme, die eine Verbindung zur Datenbank herstellen könnten
(z.B.
PGAdmin) - Richten Sie das PGDATA-Verzeichnis für die neue PostgreSQL®-Version ein:
- Entscheiden Sie, welches Verzeichnis Sie als PGDATA-Verzeichnis verwenden wollen
- Stellen Sie sicher, dass das Verzeichnis leer ist
- Vergewissern Sie sich, dass die Berechtigungen für dieses Verzeichnis
korrekt eingestellt sind:
- Vergleichen Sie die Berechtigungen des neuen PostgreSQL®-Datenverzeichnisses mit denen der aktuellen PostgreSQL®-Installation.
- Wenn Sie PG als Windows-Dienst laufen lassen wollen, stellen Sie sicher, dass Sie dem Benutzer NETWORK SERVICE volle Berechtigungen geben.
- Initialisieren Sie das ausgewählte PGDATA-Verzeichnis mit
aus der neuen
PostgreSQL®-Installation:
"C:\Program Files\PostgreSQL\<new_version>\bin\initdb.exe" -D <new PGDATA directory> -U postgres -E UTF8/usr/pgsql-<new_version>/bin/initdb -D <new PGDATA directory> -U postgres/usr/lib/postgresql/17/bin/initdb -D <new PGDATA directory> -U postgres
- Entfernen einer nicht unterstützten Erweiterungsabhängigkeit:
Mit Version 17 der PostgreSQL® -Datenbank wurde die adminpack-Erweiterung entfernt. Es ist notwendig, sie aus der Datenbank zu entfernen, falls sie hinzugefügt wurde. Melden Sie sich dazu bei der Datenbank an, die Sie aktualisieren möchten, und führen Sie den folgenden SQL-Befehl aus:
Alternativ können Sie das bereitgestellte SkriptDROP EXTENSION IF EXISTS adminpack CASCADE;drop_adminpack.sqlmit dem folgenden Befehl ausführen:Windows:Stellen Sie sicher, dass Sie die psql-Binärdatei aus der aktuellen (aktualisierten) PostgreSQL® -Version verwenden.<PostgreSQL_old_version_path>\bin\psql -f <WinCC OA install path >\data\NGA\PostgreSQL\sql\Upgrades\drop_adminpack.sql -h <hostname> -p <port> -U postgres –d winccoa -
Setzen Sie alle localhost-Adressen im
pg_hba.confim alten PGDATA-Verzeichnis auf "trust". Bei Debian-basierten Linux-Distributionen befinden sich die Konfigurationsdateien in /etc/postgresql//main. - Fahren Sie die alte PostgreSQL®-Datenbank herunter:
- Wenn Sie PostgreSQL® als Windows-Dienst ausführen, stoppen Sie einfach den Dienst postgresql-x64-<old_version>.
- Unter Linux verwenden Sie je nach Distribution den Befehl
systemctl:systemctl stop postgresql-<version>systemctl stop postgresql@<old_version>-main.service - Andernfalls verwenden Sie
pg_ctlaus der alten PostgreSQL®-Installation (wenn Sie diese Option nutzen, stellen Sie sicher, dass Ihr Betriebssystem die Datenbank nicht automatisch neu startet):"C:\Program Files\PostgreSQL\<old_version>\bin\pg_ctl.exe" stop -D <old PGDATA directory> -U postgres/usr/pgsql-<old_version>/bin/pg_ctl -D <old PGDATA directory> stop/usr/lib/postgresql/<old_version>/bin/pg_ctl -D <old PGDATA directory> stop
- Stellen Sie sicher, dass keine andere Instanz von PostgreSQL läuft und den Standardport blockiert.
- Aktualisieren Sie Ihre alte PostgreSQL®-Datenbank auf die neue PostgreSQL®
mit:
pg_upgradevon der neuen PostgreSQL®-Installation:
Die Option"C:\Program Files\PostgreSQL\<new_version>\bin\pg_upgrade.exe" -b "C:\Program Files\PostgreSQL\<old_version>\bin" -B "C:\Program Files\PostgreSQL\<new_version>\bin" -d <old PGDATA directory> -D <new PGDATA directory> -j 4 -k -p <port of old PostgreSQL® server> -P <port of new PostgreSQL® server> -U postgres/usr/pgsql-<new_version>/bin/pg_upgrade -b /usr/pgsql-<old_version>/bin -B /usr/pgsql-<new_version>/bin -d <old PGDATA directory> -D <new PGDATA directory> -j 4 -k -p <port of old PostgreSQL®> -P <port of new PostgreSQL®> -U postgres -j 4 -k -p <port of old PostgreSQL®> -P <port of new PostgreSQL®> -U postgres/usr/lib/postgresql/<new_version>/bin/pg_upgrade -b /usr/lib/postgresql/<old_version>/bin -B /usr/lib/postgresql/<new_version>/bin -d <old PGDATA directory> -D <new PGDATA directory> --old-options=”-D /etc/postgresql/16/main” -j 4 -k -p <port of old PostgreSQL®> -P <port of new PostgreSQL®> -U postgres-jkonfiguriert, wie viele parallele Jobs verwendet werden – passen Sie diesen Wert je nach verwendeter Hardware an. Die Option-kweistpg_upgradean, Hardlinks anstelle des Kopierens der Datenbankdateien zu erstellen. Diese Funktion macht den Upgrade-Prozess sehr schnell, funktioniert jedoch nur, wenn sich die neuen und alten Verzeichnisse auf demselben Dateisystem befinden. - Ändern Sie die
pg_hba.conf-Datei im neuen PGDATA-Verzeichnis von PostgreSQL® entsprechend Ihren Anforderungen (z. B. Kopieren aus dem alten PGDATA-Verzeichnis). Denken Sie daran, die in Schritt 5 vorgenommenen Änderungen rückgängig zu machen. - Starten Sie den neuen PostgreSQL®-Server:
- Wenn Sie es unter Windows als Dienst starten möchten, öffnen Sie Dienste und stellen Sie sicher, dass das Argument für den D-Switch des postgresql-x64-<neue Version> auf das richtige PGDATA-Verzeichnis neues PGDATA-Verzeichnis> verweist und starten Sie den Dienst.
- Unter Linux verwenden Sie den Befehl
systemctl, abhängig von Ihrer Distribution:systemctl start postgresql-<version>systemctl start postgresql@<old_version>-main.service - Wenn Sie es manuell starten, verwenden Sie:
pg_ctl:"C:\Program Files\PostgreSQL\<new_version>\bin\pg_ctl.exe" start -D <new PGDATA directory> -w -U postgres/usr/pgsql-<new_version>/bin/pg_ctl -D <new PGDATA directory> start/usr/lib/postgresql/<new_version>/bin/pg_ctl -D <new PGDATA directory> start
- Entfernen des alten Datenverzeichnisses:
Der Befehl
pg_upgradeerstellt ein Skriptdelete_old_cluster.batoderdelete_old_cluster.sh, das verwendet werden sollte, um das alte Datenbankverzeichnis nach einer erfolgreichen Aktualisierung zu entfernen.Alternativ kann das alte Datenverzeichnis manuell entfernt werden.
- Aktualisieren Sie das Datenbankschema, indem Sie die entsprechenden Anweisungen hier befolgen PostgreSQL®-Datenbankwartung - DBAdmin-Managed Database.
- Nachdem Sie den Server gestartet haben, schließen Sie das Upgrade ab, indem Sie
SELECT analyze_database();aufrufen. Dadurch werden die Tabellen der Reihe nach analysiert, beginnend mit den zuletzt erstellten. Dies verbessert schnell die Leistung von Abfragen, die nur die neuesten Daten verwenden."C:\Program Files\PostgreSQL\<new_version>\bin\psql.exe" -U postgres -d winccoa -c " SELECT analyze_database();"/usr/pgsql-<new_version>/bin/pg_ctl -U postgres -d winccoa -c "analyze;"/usr/lib/postgresql/<new_version>/bin/pg_ctl -U postgres -d winccoa -c "SELECT analyze_database();"
