Anmelden
Anmelden

Aktualisierung der PostgreSQL-Version

Aktualisierung der PostgreSQL-Version
Hostman Team
Technical writer
PostgreSQL-Datenbanken
06.11.2025
Reading time: 8 min

In PostgreSQL erfolgt das Upgrade der Version auf verschiedene Arten:

  • Installation von Paketen mit der neuen PostgreSQL-Version. Diese Methode ist nur für kleinere Updates geeignet. Vor der Durchführung des Upgrades sollten die Release-Notizen gelesen werden;

  • Verwendung des standardmäßigen pg_dumpall-Programms. Dies ist eine zuverlässige Methode, kann jedoch zu längeren Ausfallzeiten führen;

  • Verwendung des standardmäßigen pg_upgrade-Programms. Eine weitere schnelle Möglichkeit für das Upgrade, aber es können Fehler auftreten;

  • Durchführung des Upgrades über logische Replikation. Diese Option hat minimale Ausfallzeiten, ist jedoch nur für PostgreSQL-Versionen größer als 10.0 geeignet. Ältere Versionen erfordern Erweiterungen.

Die Wahl der Methode hängt davon ab, welche Version auf dem Server verwendet wird und auf welche Version Sie aktualisieren möchten.

In diesem Artikel gehen wir auf alle oben genannten Upgrade-Methoden ein.

Wichtige Hinweise vor dem Upgrade

Das Wichtigste ist, die Besonderheiten des Upgrades zwischen verschiedenen Versionen zu verstehen.

Die Versionsnummern bestehen aus zwei Ziffern, z. B. 10.1. Die erste Ziffer ist die Hauptversionsnummer (10) und die zweite Ziffer ist die Nebenversionsnummer (1).

Vor PostgreSQL 10 bestanden die Versionsnummern aus drei Ziffern. Zum Beispiel war in 9.6.3 die Hauptversionsnummer 9.6 und die Nebenversionsnummer 3.

Sie müssen diesen Unterschied verstehen, um die richtige Upgrade-Methode auszuwählen.

In Nebenversionen ändert sich das Datenformat nicht, sodass es keine Kompatibilitätsprobleme gibt. Daher ist der Übergang von PostgreSQL 10.1 auf 10.6 sehr einfach. Um das Upgrade durchzuführen, schalten Sie den Server aus, ersetzen Sie die ausführbaren Dateien und starten Sie den Server erneut.

Die Dokumentation weist jedoch darauf hin, dass einige Releases manuelle Änderungen erfordern können. Lesen Sie daher immer die Release-Notizen, bevor Sie ein Upgrade durchführen.

In Hauptversionen kann sich das Datenformat ändern, was das Upgrade erschwert. Sie müssen entweder die Daten entladen und erneut hochladen, das pg_upgrade-Programm verwenden oder die logische Replikation einsetzen.

Upgrade innerhalb einer Hauptversion

Schauen wir uns an, wie man PostgreSQL Version 14.1 auf PostgreSQL 14.3 auf einem Ubuntu-Server aktualisiert.

PostgreSQL ist standardmäßig auf Ubuntu verfügbar. Starten Sie mit dem Befehl:

sudo apt-get upgrade

Debian und Ubuntu veröffentlichen nur eine Version von PostgreSQL pro OS-Release. Zum Beispiel hat Debian Squeeze/6.0 nur PostgreSQL 8.4. Wenn Sie eine andere Version benötigen, verwenden Sie die Pakete von PGDG.

Wenn Sie die neueste Version von PostgreSQL möchten, müssen Sie zuerst das Postgres-Repository installieren:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Importieren Sie den Signierschlüssel:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Aktualisieren Sie die Liste der Pakete im System:

sudo apt-get update

Installieren Sie die erforderliche PostgreSQL-Version:

sudo apt-get -y install postgresql-14.3

Um die Liste der installierten DBMSs anzuzeigen, führen Sie folgenden Befehl aus:

dpkg --get-selections | grep postgres

Sehen Sie sich auch die Liste der Cluster an:

pg_lsclusters

Stoppen Sie PostgreSQL vor den Änderungen:

sudo service postgresql stop

Wenn die Postgres-Pakete installiert sind, wird ein Standard-Cluster erstellt. Benennen Sie den neuen Postgres-Cluster um, um Konflikte mit dem alten Clusternamen beim Upgrade zu vermeiden:

sudo pg_renamecluster 14.3 main main_pristine

Führen Sie das Upgrade des alten Clusters durch:

sudo pg_upgradecluster 14.1 main

Starten Sie den Dienst:

sudo service postgresql start

Überprüfen Sie erneut die Liste der Cluster und stellen Sie sicher, dass der neue Cluster funktioniert:

pg_lsclusters

Löschen Sie den alten Cluster:

sudo pg_dropcluster 14.1 main

Upgrade über pg_dumpall

Wenn Sie die Hauptversion ändern müssen, verwenden Sie das Programm pg_dumpall. Das Wesentliche dieser Methode ist es, Daten aus einer Hauptversion zu entladen und sie dann in eine andere Version zu laden.

Bevor Sie Daten entladen, stellen Sie sicher, dass derzeit keine Änderungen an der Datenbank vorgenommen werden. Andernfalls können einige Änderungen im endgültigen Dump fehlen.

Holen Sie den Dump und schreiben Sie ihn in eine Datei:

pg_dumpall > output_file

Stoppen Sie den Server:

pg_ctl stop

Ändern Sie den Namen des alten Verzeichnisses, um Namenskonflikte zu vermeiden:

mv /usr/local/pgsql /usr/local/pgsql.old

Das alte Verzeichnis kann einfach gelöscht werden. Es wäre jedoch klüger, es umzubenennen, um Platz für die Wiederherstellung zu lassen. Geben Sie anstelle von /usr/local/pgsql den Pfad zu Ihrem Verzeichnis an.

Installieren Sie die neue Version aus dem Quellcode. Eine detaillierte Anleitung finden Sie in der Dokumentation.

Erstellen Sie einen neuen Cluster:

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

Übertragen Sie alle Änderungen an den Dateien pg_hba.conf und postgresql.conf.

Starten Sie den Datenbank-Server:

/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

Stellen Sie die Daten aus dem Backup wieder her:

/usr/local/pgsql/bin/psql -d postgres -f output_file

Der Nachteil dieser Methode ist, dass der Server für längere Zeit ausgeschaltet wird. Um die Ausfallzeiten zu reduzieren, können Sie den neuen Server in einem anderen Verzeichnis installieren und dann den alten und neuen Server auf unterschiedlichen Ports ausführen. Zum Übertragen der Daten verwenden Sie den Befehl:

pg_dumpall -p 5432 | psql -d postgres -p 5433

Ersetzen Sie 5432 und 5433 durch die Portnummern, auf denen Sie die Server ausgeführt haben.

Upgrade über pg_upgrade

Um das Entladen und Hochladen von Daten zu vermeiden, verwenden Sie das Programm pg_upgrade. Es hilft Ihnen, schneller zu aktualisieren. Das pg_upgrade-Programm erstellt Systemtabellen neu und berücksichtigt die Änderungen in den neuesten PostgreSQL-Versionen. In diesem Fall werden die alten Datendateien beibehalten. Zusätzlich überprüft pg_upgrade, ob die Cluster kompatibel sind.

Das pg_upgrade-Programm hilft Ihnen, von PostgreSQL 8.4.X auf die aktuelle DBMS-Version zu aktualisieren.

Lassen Sie uns einen allgemeinen Upgrade-Plan mit pg_upgrade durchgehen.

Bewegen Sie den alten Cluster. Dies muss erfolgen, wenn das Verzeichnis nicht mit der alten Version verknüpft war. Zum Beispiel befindet es sich in /usr/local/pgsql. Wenn Sie es nicht umbenennen, tritt ein Konflikt während des Updates auf.

Die Umbenennung erfolgt, wenn der Server ausgeschaltet ist:

mv /usr/local/pgsql /usr/local/pgsql.old

Bauen Sie die neue Version aus dem Quellcode. Passen Sie configure so an, dass die Flags mit der alten Clusterkonfiguration kompatibel sind. Bevor Sie das Upgrade starten, prüft pg_upgrade die Kompatibilität der Flags.

Installieren Sie die neuen ausführbaren Dateien. Um den Server in einem nicht standardmäßigen Verzeichnis zu platzieren, verwenden Sie das Präfix:

make prefix=/usr/local/pgsql.new install

Verwenden Sie initdb, um einen neuen Cluster zu initialisieren. Überprüfen Sie, ob die Flags mit den Flags des alten Clusters kompatibel sind.

Installieren Sie Erweiterungs-Shared-Object-Dateien. Wenn Updates verfügbar sind, erstellt pg_upgrade automatisch ein Skript für deren spätere Installation.

Übertragen Sie die Volltextsuche-Dateien.

Konfigurieren Sie die Peer-Authentifizierung in pg_hba.conf. Dies muss erledigt werden, da pg_upgrade mehrmals eine Verbindung zu den alten und neuen Hosts herstellen wird.

Überprüfen Sie, dass der alte und der neue Server gestoppt sind:

pg_ctl -D /opt/PostgreSQL/9.6 stop

pg_ctl -D /opt/PostgreSQL/14 stop

Führen Sie pg_upgrade vom neuen Server aus. Zuerst rufen Sie das Programm im Prüfmodus auf, indem Sie das Flag hinzufügen: pg_upgrade --check. Als Antwort erhalten Sie eine Liste von Anpassungen, die nach dem Upgrade manuell vorgenommen werden müssen.

Wenn Sie Änderungen an der Datei pg_hba.conf vorgenommen haben, stellen Sie diese auf ihren vorherigen Zustand zurück. Manchmal müssen auch andere Konfigurationen im neuen Cluster geändert werden, um mit den Einstellungen des alten Clusters übereinzustimmen.

Starten Sie den Server.

Wenn Sie mit dem Ergebnis zufrieden sind, löschen Sie den alten Cluster.

Für Details und Funktionen zur Verwendung von pg_upgrade siehe die Dokumentation.

Verwendung von Logischer Replikation

Ab Version 10 von PostgreSQL haben wir eine Methode für die logische Replikation von Datenobjekten und Änderungen an ihnen. Sie basiert auf der Verwendung von Replikations-IDs, die normalerweise Primärschlüssel sind.

Logische Replikation verwendet das Publish-Subscribe-Modell. Der Benutzer erstellt einen Snapshot der veröffentlichten Datenbank und kopiert ihn an den Subscriber. In der PostgreSQL-Dokumentation ist ein typisches Szenario für die Verwendung der logischen Replikation genau die Replikation zwischen verschiedenen Hauptversionen von PostgreSQL.

Der Backup-Server kann sich auf demselben oder einem anderen Host befinden. Nach Abschluss der Synchronisierung sind verschiedene Optionen verfügbar. Beispielsweise können Sie den neuen Server zum Hauptserver machen und den alten deaktivieren.

Der Hauptvorteil der logischen Replikation ist die minimale Ausfallzeit. Die Serverunterbrechung ist in einigen Fällen auf wenige Sekunden beschränkt.

Fazit

Wir haben uns universelle Methoden zum Upgrade von PostgreSQL auf eine neue Hauptversion und zum Update innerhalb einer Hauptversion angesehen.

Mit dieser Anleitung können Sie die Methode auswählen, die am besten für Ihren speziellen Fall geeignet ist, und Ihre aktuelle PostgreSQL-Version aktualisieren.

PostgreSQL-Datenbanken
06.11.2025
Reading time: 8 min

Ähnlich

Kubernetes-Plattform

So stellen Sie PostgreSQL auf Kubernetes bereit

PostgreSQL ist ein beliebtes relationales Datenbank-Management-System (RDBMS), das Hochverfügbarkeitsfunktionen wie Streaming-Replikation, logische Replikation und Failover-Lösungen bietet. Eine Bereitstellung von PostgreSQL auf Kubernetes ermöglicht es Organisationen, robuste Systeme zu bauen, die minimale Ausfallzeiten und Datenverfügbarkeit sicherstellen. Mit Kubernetes StatefulSets lässt sich eine PostgreSQL-Bereitstellung je nach Bedarf skalieren. Choose hour server now! Kubernetes-Umgebung einrichten Stelle sicher, dass du Folgendes besitzt: Kubernetes-Cluster (Cloud oder lokal): Du kannst z. B. bei Hostman binnen Minuten einen Cluster einrichten. Lokal funktionieren Tools wie k3s, minikube, microk8s oder kind. kubectl: Mit kubectl interagierst du mit dem Kubernetes-Cluster. Es benötigt eine Konfigurations-YAML-Datei mit Cluster-Details, meist vom Cloud-Provider bereitgestellt. Sie können diese Konfigurationsdatei einfach per Mausklick über das Hostman-Kontrollfeld herunterladen, wie im folgenden Screenshot gezeigt. Beispiel: export KUBECONFIG=/absolute/path/to/file/k8s-cluster-config.yaml Helm: Du benötigst die Helm-CLI zur Installation von Charts. Version 3 wird vorausgesetzt. PostgreSQL mit einem Helm-Chart bereitstellen Helm ist ein Paketmanager für Kubernetes — ähnlich wie apt für Ubuntu/Debian.Anstatt viele YAML-Dateien (Pods, Services, PersistentVolumes, Secrets …) manuell zu erstellen, erledigt das Helm-Chart vieles mit einem einzigen Befehl. Schritt 1: Helm-Repository hinzufügen helm repo add bitnami https://charts.bitnami.com/bitnami So synchronisieren Sie Ihr lokales Helm-Repository mit dem Remote-Repository: helm repo update Schritt 2: Datenpersistenz verwalten PostgreSQL benötigt persistenten Speicher, damit Daten nicht verloren gehen, wenn ein Pod abstürzt oder neu geplant wird. Erstelle eine Datei postgres-local-pv.yaml: apiVersion: v1 kind: PersistentVolume metadata: name: postgresql-local-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: manual hostPath: path: /mnt/data/postgresql ⚠️ Hinweis: hostPath verweist auf ein lokales Verzeichnis auf einem Node. Das birgt Risiko in Produktionsumgebungen. Empfehlenswert ist cloud-native Speicherung (z. B. Ceph, Portworx, OpenEBS) für Zuverlässigkeit, Skalierbarkeit und Datenschutz. Erstelle eine Datei postgres-local-pvc.yaml: apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgresql-local-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: manual Modus ReadWriteOnce bedeutet: Nur ein Node kann das Volume gleichzeitig lesen und schreiben – ReadWriteMany klingt flexibel, kann jedoch in Postgres-Clustern Rennbedingungen, Dateninkonsistenzen oder Datenkorruption erzeugen. Wenden Sie die Manifeste an: kubectl apply -f postgres-local-pv.yamlkubectl apply -f postgres-local-pvc.yaml Schritt 3: Helm-Chart installieren helm install tutorial-db bitnami/postgresql --set auth.username=bhuwan \ --set auth.password=”AeSeigh2gieshe” \ --set auth.database=k8s-tutorial \ --set auth.postgresPassword=”Ze4hahshez6dop9vaing” \ --set primary.persistence.existingClaim=postgresql-local-pvc \ --set volumePermissions.enabled=true Nach einigen Minuten prüfen Sie: kubectl get all Schritt 4: Testen und verbinden export POSTGRES_PASSWORD=$(kubectl get secret --namespace default tutorial-db-postgresql -o jsonpath="{.data.password}" | base64 -d) kubectl run tutorial-db-postgresql-client --rm --tty -i --restart='Never' \ --image docker.io/bitnami/postgresql:17.2.0-debian-12-r6 \ --env="PGPASSWORD=$POSTGRES_PASSWORD" \ --command -- psql --host tutorial-db-postgresql \ -U bhuwan -d k8s-tutorial -p 5432 Nach Beendigung wird der Pod wegen --rm automatisch gelöscht. ⚠️ Wenn Helm Release-Name, Benutzer oder Datenbankname geändert wurden, passen Sie die Befehle entsprechend an. PostgreSQL auf Kubernetes von Grund auf bereitstellen Ein StatefulSet ist die beste Ressource für zustandsbehaftete Anwendungen wie PostgreSQL: Jeder Pod erhält eine stabile Identität und persistente Volumes. Zuerst löschen wir bestehende Ressourcen: helm delete tutorial-db kubectl delete pvc postgresql-local-pvc kubectl delete pv postgresql-local-pv kubectl apply -f postgres-local-pv.yaml -f postgres-local-pvc.yaml Erstelle eine Datei postgres-statefulset.yaml: apiVersion: apps/v1 kind: StatefulSet metadata: name: postgres-statefulset labels: app: postgres spec: serviceName: "postgresql-headless-svc" replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:17.2 envFrom: - secretRef: name: postgresql-secret ports: - containerPort: 5432 name: postgresdb volumeMounts: - name: pv-data mountPath: /var/lib/postgresql/db volumes: - name: pv-data persistentVolumeClaim: claimName: postgresql-local-pvc Erstelle zuerst das Secret: kubectl create secret generic postgresql-secret --from-literal=POSTGRES_PASSWORD=Ze4hahshez6dop9vaing kubectl apply -f postgres-statefulset.yaml Wenn der Pod im Zustand Pending bleibt, könnte eine StorageClass fehlen. Beispiel: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: manual provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer Zur Problemanalyse: kubectl describe pod postgres-statefulset-0 Erstelle eine Headless-Service für interne Nutzung: postgres-service.yaml: apiVersion: v1 kind: Service metadata: name: postgresql-headless-svc spec: type: ClusterIP selector: app: postgres ports: - port: 5432 targetPort: 5432 clusterIP: None Dann testen: kubectl run tutorial-db-postgresql-client --rm --tty -i --restart='Never' \ --image docker.io/bitnami/postgresql:17.2.0-debian-12-r6 \ --env="PGPASSWORD=Ze4hahshez6dop9vaing" \ --command -- psql --host postgres-statefulset-0.postgresql-headless-svc \ -U postgres -p 5432 Skalierung, Replikation und Backup Skalieren eines StatefulSets: kubectl scale statefulset postgres-statefulset --replicas=3 Mit einer Headless-Service kannst du Anfragen an bestimmte Pods richten (z. B. postgres-statefulset-1.postgresql-headless-svc). Für Backups kannst du einen CronJob mit pg_dump verwenden. Best Practices Ressourcenanforderungen und Limits setzen: CPU/Mem klar definiert für Stabilität Backups regelmäßig planen; evtl. Volume Snapshots Monitoring & Logs: Prometheus/Grafana für Metriken (Queries, Disk, Replikation) PodDisruptionBudgets (PDBs): Zu viele Ausfälle gleichzeitig vermeiden Choose your server now! Fazit Ein Helm-Chart ist der empfohlene Weg für komplexe und produktive Deployments. Helm automatisiert Versionsverwaltung und verbirgt viele Details der Kubernetes-Komponenten. Mit helm template kannst du Charts lokal rendern und YAML-Manifeste anpassen. Kubernetes bietet Skalierbarkeit, Flexibilität und Automatisierbarkeit für PostgreSQL-Datenbanken. Durch Nutzung von StatefulSets, PersistentVolumes/Claims, PodDisruptionBudgets und Secrets-Management kann deine PostgreSQL-Instanz produktionsreif betrieben werden.
27 October 2025 · 6 min to read

Haben Sie Fragen,
Anmerkungen oder Bedenken?

Unsere Fachleute stehen Ihnen jederzeit zur Verfügung,
egal ob Sie Hilfe benötigen oder nicht wissen, wo Sie anfangen sollen.
E-Mail an uns
Hostman's Support