Benutzer-Werkzeuge

Webseiten-Werkzeuge


datenbank:postgresql_upgrade

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
datenbank:postgresql_upgrade [2024-02-12 12:56:15] – [Stand-Alone-Installation] manfreddatenbank:postgresql_upgrade [2025-08-09 21:30:52] (aktuell) – [So geht es auch] manfred
Zeile 1: Zeile 1:
 +====== PostgreSQL Upgrade ======
 +
 +  * [[https://decatec.de/linux/postgresql-upgrade-auf-neue-version-durchfuehren/|PostgreSQL: Upgrade auf neue Version durchführen]]
 +  * [[https://madafa.de/blog/postgres-aktualisieren-und-upgraden/|Postgres aktualisieren und upgraden]]
 +  * [[https://runebook.dev/de/docs/postgresql/pgupgrade|pg_upgrade]]
 +  * [[https://www.postgresql.org/docs/12/runtime.html|postgresql.org]]
 +    * [[https://www.postgresql.org/docs/12/upgrading.html|18.6. Upgrading a PostgreSQL Cluster]]
 +    * **[[https://www.postgresql.org/docs/12/pgupgrade.html|pg_upgrade]]**
 +
 +
 +===== Upgrade auf PostgreSQL 14 =====
 +
 +[[https://decatec.de/linux/postgresql-upgrade-auf-neue-version-durchfuehren/#Hinweise_fuer_Upgrade_auf_PostgreSQL_14|Hinweise für Upgrade auf PostgreSQL 14]]
 +
 +Beim Upgrade auf PostgreSQL 14 gibt es noch einen weiteren Punkt zu beachten: Hier ändert sich das Authentifizierungs-Verfahren von md5 auf scram-sha-256. Dabei handelt es sich um Hashing-Verfahren von Passwörtern. Weitere Informationen dazu sind in der PostgreSQL-Dokumentation zu finden.
 +
 +Nach einem Update von PostgreSQL 13 auf Version 14 werden die Anwendungen zunächst einmal keine Verbindung mehr zur Datenbank aufbauen können, da sich das Hashing-Verfahren geändert hat. In diesem Fall müssen die Passwörter aller PostgreSQL-Benutzer neu gesetzt werden.
 +
 +Zunächst einmal kann man sich alle Datenbank-Benutzer auflisten lassen:
 +  > echo "\du" | psql -U postgres
 +
 +So wird das Passwort eines Datenbank-Users neu gesetzt //(neu setzen, nicht ändern)//:
 +  > echo "\password user_name" | psql -U postgres
 +
 +**Hinweis:** Das Passwort sollte in diesem Schritt nicht geändert werden, sondern es sollte das gleiche Passwort für den Benutzer verwendet werden, welches vorher auch schon genutzt wurde. Andernfalls müsste auch die Konfiguration des Programms geändert werden, welches den Datenbank-Zugriff benötigt.
 +
 +Anschließend sollte der Datenbank-Zugriff wieder wie gewohnt funktionieren.
 +
 +
 +===== Stand-Alone-Installation =====
 +
 +
 +==== komplett neu machen ====
 +
 +Dump erstellen:
 +  > pg_dumpall -E UTF8 -U postgres --if-exists --inserts -c > dump_data+schema.sql
 +  > pg_dumpall -E UTF8 -U postgres --inserts -a > dump_data.sql
 +  > pg_dumpall -E UTF8 -U postgres -s > dump_schema.sql
 +
 +DB komplett löschen und neu machen
 +  > service postgresql stop
 +  > rm -fr /usr/local/pgsql/data
 +  > su - postgres -c "initdb -D /usr/local/pgsql/data -U postgres -E UTF8 --locale=de_DE.UTF-8"
 +  > service postgresql status
 +  > service postgresql start
 +  > echo -e "\du\n\l" | psql -U postgres
 +
 +Benutzer anlegen:
 +  > createuser -U postgres --no-superuser --no-createdb --no-createrole MEINUSER
 +
 +Datenbank für den neuen Benutzer anlegen:
 +  > createdb -E UTF8 --locale=de_DE.UTF-8 -U postgres -O MEINUSER MEINEDB
 +
 +Dump in die Datenbank des neuen Benutzers einspielen:
 +  > psql -U MEINUSER -d MEINEDB -f dump_xxx.sql
 +  > echo -e "\du\n\l\n\dt" | psql -U MEINUSER -d MEINEDB
 +
 +
 +=== So geht es auch ===
 +
 +<code bash von 16 zu 17>
 +echo -e "\du\n\l" | psql -U postgres
 +pg_dumpall -E UTF8 -U postgres --if-exists --inserts -c > dump_data+schema.sql
 +service postgresql stop
 +
 +mv /usr/local/pgsql/data /usr/local/pgsql/data.old
 +
 +pkg info -oa | grep -Fi postgresql
 +  postgresql16-client-16.9       databases/postgresql16-client
 +  postgresql16-server-16.9_1     databases/postgresql16-server
 +pkg install -y databases/postgresql17-server
 +pkg info -oa | grep -Fi postgresql
 +  postgresql17-client-17.5       databases/postgresql17-client
 +  postgresql17-server-17.5_1     databases/postgresql17-server
 +
 +su - postgres -c "initdb -D /usr/local/pgsql/data -U postgres -E UTF8 --locale=de_DE.UTF-8"
 +cat /usr/local/pgsql/data/PG_VERSION
 +service postgresql start
 +echo -e "\du" | psql -U postgres
 +
 +time cat dump_data+schema.sql | psql -U postgres -d template1
 +  real    41m21.991s
 +  user    0m4.765s
 +  sys     0m3.138s
 +
 +echo "SELECT * FROM pg_stat_activity;" | psql -U postgres
 +</code>
 +
 +<code bash prüfen>
 +echo "SELECT COUNT(MEINESPALTE) FROM MEINETAB;" | psql -U MEINUSER -td MEINEDB
 +echo -e "\du\n\l" | psql -U postgres
 +</code>
 +
 +
 +==== mit pg_upgrade ====
 +
 +**SICHERHEIT GEHT VOR!**\\
 +Als erstes eine Sicherung anlegen **//(Bevor das Upgrade begonnen wird!)//**:
 +  > pg_dumpall -E UTF8 -U postgres --if-exists --inserts -c > dumpall.sql
 +
 +__Beachten Sie, dass ''pg_upgrade'' nur funktioniert, wenn die Kodierungen der alten und der neuen Datenbankinstanz übereinstimmen. Andernfalls schlägt es fehl.__
 +
 +**Bei dieser Methode muß sowohl die alte als auch die neue Version, nebeneinander installiert sein!** => ''siehe Internet''
 +