Inloggen
Inloggen

PostgreSQL: Versie-upgrade Methoden

PostgreSQL: Versie-upgrade Methoden
Hostman Team
Technical writer
PostgreSQL-databases
06.11.2025
Reading time: 8 min

In PostgreSQL wordt versie-upgrade op verschillende manieren uitgevoerd:

  • Pakketten installeren met een nieuwe versie van PostgreSQL. Dit is geschikt voor kleinere updates. Lees de release-opmerkingen goed door voordat je de upgrade uitvoert.

  • Gebruik van het standaard pg_dumpall-programma. Dit is een betrouwbare methode, maar er kan een lange downtime zijn.

  • Gebruik van het standaard pg_upgrade-programma. Een andere snelle manier om te upgraden, maar fouten kunnen zich voordoen.

  • Upgraden via logische replicatie. Deze optie heeft minimale downtime, maar is alleen geschikt voor PostgreSQL-versies groter dan 10.0. Eerdere versies vereisen uitbreidingen. De keuze hangt af van de versie die op de server wordt gebruikt en naar welke versie je wilt upgraden.
    In dit artikel behandelen we alle bovengenoemde upgrade-methoden.

Belangrijke opmerking vóór de upgrade

Het belangrijkste is om de bijzonderheden van updates tussen verschillende versies te begrijpen. De versienummers bestaan uit twee cijfers, bijvoorbeeld 10.1. Het eerste cijfer is het belangrijkste versienummer (10). Het tweede cijfer is het minor release-nummer (1). Voor PostgreSQL vóór versie 10 bestonden de versienummers uit drie cijfers. Bijvoorbeeld, in 9.6.3, is 9.6 het belangrijkste release-nummer en 3 het minor versienummer.

Je moet dit verschil begrijpen om de juiste upgrade-methode te kiezen.

In minor-versies verandert het gegevensopslagformaat niet, dus er zijn geen compatibiliteitsproblemen. Daarom kan de overgang van PostgreSQL 10.1 naar 10.6 zeer gemakkelijk worden uitgevoerd. Om te upgraden, zet je de server uit, vervang je de uitvoerbare bestanden en start je de server opnieuw.
De documentatie meldt echter dat sommige releases handmatige wijzigingen kunnen vereisen. Lees altijd de release-opmerkingen voordat je de upgrade uitvoert.

In major-versies kan het gegevensformaat veranderen. Dit maakt de update moeilijker. Je moet de gegevens mogelijk exporteren en opnieuw importeren, het pg_upgrade-programma gebruiken of logische replicatie toepassen.

Laten we alle methoden hieronder bekijken.

Upgraden binnen één major versie

Laten we kijken hoe je PostgreSQL versie 14.1 kunt upgraden naar versie 14.3 op een Ubuntu-server.

PostgreSQL is standaard beschikbaar op Ubuntu. Begin met het commando:

sudo apt-get upgrade

Debian en Ubuntu brengen slechts één versie van PostgreSQL per besturingssysteemversie uit. Bijvoorbeeld, Debian Squeeze/6.0 heeft alleen PostgreSQL 8.4. Als je een andere versie van PostgreSQL nodig hebt, gebruik dan pakketten van PGDG.

Als je de laatste versie van PostgreSQL wilt, moet je eerst het Postgres-repository installeren.

Voeg een repository toe:

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

Importeer de signeringssleutel:

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

Werk de pakketlijst in het systeem bij:

sudo apt-get update

Installeer de benodigde PostgreSQL-versie:

sudo apt-get -y install postgresql-14.3

Om de lijst van geïnstalleerde DBMS's te bekijken, voer het volgende uit:

dpkg --get-selections | grep postgres

Bekijk ook de lijst van clusters:

pg_lsclusters

Stop PostgreSQL voordat je wijzigingen aanbrengt:

sudo service postgresql stop

Wanneer de PostgreSQL-pakketten zijn geïnstalleerd, maken ze een standaardcluster voor je. Je moet de naam van het nieuwe PostgreSQL-cluster wijzigen om conflicten met de oude clusternaam tijdens de upgrade te voorkomen:

sudo pg_renamecluster 14.3 main main_pristine

Upgrade het oude cluster:

sudo pg_upgradecluster 14.1 main

Start de service:

sudo service postgresql start

Controleer opnieuw de lijst van clusters en zorg ervoor dat het nieuwe cluster werkt:

pg_lsclusters

Verwijder de oude cluster:

sudo pg_dropcluster 14.1 main

Upgraden via pg_dumpall

Als je de major versie moet wijzigen, gebruik dan het pg_dumpall-programma. Het principe van deze methode is om gegevens uit één major versie te exporteren en ze vervolgens in een andere versie te importeren.

Voordat je de gegevens exporteert, moet je ervoor zorgen dat er geen wijzigingen in de database worden aangebracht. Anders worden sommige wijzigingen mogelijk niet opgenomen in de uiteindelijke dump.

Verkrijg de dump en schrijf deze naar een bestand:

pg_dumpall > output_file

Stop de server:

pg_ctl stop

Wijzig de naam van de oude directory om naamconflicten te voorkomen:

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

De oude directory kan gewoon worden verwijderd. Maar het is wijzer om het te hernoemen om ruimte voor herstel te behouden. In plaats van /usr/local/pgsql geef je het pad naar je directory op.

Installeer de nieuwe versie vanaf de bron. Er is een gedetailleerde handleiding in de documentatie.

Maak een nieuwe cluster aan:

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

Zorg ervoor dat je de wijzigingen in de pg_hba.conf en postgresql.conf bestanden overzet.

Start de database-server:

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

Herstel de gegevens uit de back-up:

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

Het nadeel van deze methode is dat de server voor een lange tijd uitgeschakeld zal zijn. Om de downtime te verminderen, kun je de nieuwe server in een andere directory installeren en vervolgens de oude en nieuwe servers op verschillende poorten draaien. Om gegevens over te zetten, gebruik het commando:

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

Vervang 5432 en 5433 door de poortnummers waarop je de servers hebt uitgevoerd.

Upgraden via pg_upgrade

Om het exporteren en importeren van gegevens te vermijden, gebruik het pg_upgrade-programma. Het helpt je sneller te upgraden. Het pg_upgrade-programma maakt systeemtabellen opnieuw, rekening houdend met de wijzigingen in de nieuwste PostgreSQL-versies. In dit geval blijven de oude gegevensbestanden behouden. Daarnaast verifieert pg_upgrade of de clusters compatibel zijn.

Het pg_upgrade-programma helpt je upgraden van PostgreSQL 8.4.X naar de huidige DBMS-release.

Laten we een algemeen upgradeplan bekijken met behulp van pg_upgrade.

Verplaats de oude cluster. Dit moet worden gedaan als de directory niet naar de oude release was gelinkt. Bijvoorbeeld, het bevindt zich in /usr/local/pgsql. Als je het niet hernoemt, ontstaat er een conflict tijdens de update.

Hernoemen gebeurt wanneer de server is uitgeschakeld met het commando:

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

Bouw de nieuwe versie vanaf de bron. Pas de configureeropties aan zodat de vlaggen compatibel zijn met de oude clusterconfiguratie. Voordat je de upgrade start, controleert pg_upgrade de compatibiliteit van de vlaggen.

Installeer nieuwe uitvoerbare bestanden. Gebruik een prefix om de server in een niet-standaard directory te plaatsen:

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

Gebruik initdb om een nieuwe cluster te initialiseren. Controleer of de vlaggen compatibel zijn met de vlaggen van de oude cluster.

Installeer de uitbreidingsbestanden van gedeelde objecten. Als er updates beschikbaar zijn, maakt pg_upgrade automatisch een script voor hun latere installatie.

Zorg ervoor dat de peer-authenticatie in pg_hba.conf is ingesteld. Dit moet worden gedaan omdat pg_upgrade meerdere keren verbinding maakt met de oude en nieuwe hosts.

Controleer of de oude en nieuwe servers zijn gestopt:

pg_ctl -D /opt/PostgreSQL/9.6 stop

pg_ctl -D /opt/PostgreSQL/14 stop

Voer pg_upgrade uit vanaf de nieuwe server. Roep eerst het programma aan in de controlemodus door de vlag toe te voegen: pg_upgrade --check. In reactie ontvang je een lijst met aanpassingen die handmatig moeten worden uitgevoerd na de upgrade.

Als je wijzigingen hebt aangebracht in het bestand pg_hba.conf, herstel het dan naar de vorige pg_hba.conf status. Soms moeten andere configuraties op de nieuwe cluster worden gewijzigd om overeen te komen met de instellingen van de oude cluster.

Start de server.

Als je tevreden bent met het resultaat, verwijder dan de oude cluster.

Voor details en functies van het gebruik van pg_upgrade, zie de documentatie.

Gebruik van Logische Replicatie

Vanaf versie 10 van PostgreSQL is er een methode voor logische replicatie van gegevensobjecten en de wijzigingen daarin. Het is gebaseerd op het gebruik van replicatie-identificators; meestal zijn dit primaire sleutels.

Logische replicatie maakt gebruik van het publish-subscribe-model. De gebruiker maakt een momentopname van de gepubliceerde database en kopieert deze naar de abonnee. In de PostgreSQL-documentatie is een van de typische scenario’s voor het gebruik van logische replicatie juist de replicatie tussen verschillende major versies van PostgreSQL.

De back-upserver kan zich op dezelfde of een andere host bevinden. Nadat de synchronisatie is voltooid, zijn er verschillende opties beschikbaar. Bijvoorbeeld, je kunt de nieuwe server de hoofdserver maken en de oude uitschakelen.

Het belangrijkste voordeel van logische replicatie is de minimale downtime. De serveronderbreking is in sommige gevallen beperkt tot een paar seconden.

Conclusie

We hebben gekeken naar de universele methoden voor het upgraden van PostgreSQL naar een nieuwe major versie en het updaten binnen één major versie.

Met deze gids kun je de methode kiezen die het beste bij jouw situatie past en je huidige versie van PostgreSQL updaten.

PostgreSQL-databases
06.11.2025
Reading time: 8 min

Vergelijkbaar

Kubernetes-platform

PostgreSQL implementeren op Kubernetes: stap-voor-stap handleiding

PostgreSQL is een populair relationeel databasebeheersysteem (RDBMS) met functies voor hoge beschikbaarheid, zoals streamingreplicatie, logische replicatie en failover. Door PostgreSQL op Kubernetes te implementeren, kunnen organisaties veerkrachtige systemen bouwen die minimale downtime en hoge gegevensbeschikbaarheid garanderen. Met Kubernetes StatefulSets kun je PostgreSQL dynamisch schalen op basis van de vraag. Choose hour server now! Kubernetes-omgeving voorbereiden Zorg dat je het volgende hebt: Kubernetes-cluster (cloud of lokaal): je kunt binnen enkele minuten een cluster opzetten bij Hostman. Voor een lokale omgeving kun je tools gebruiken zoals k3s, minikube, microk8s of kind. kubectl: dit CLI-hulpmiddel communiceert met je cluster. Het vereist een YAML-configuratiebestand met de clusterdetails (meestal geleverd door je cloudprovider). Download het bestand eenvoudig via het Hostman-controlepaneel en stel vervolgens de omgevingsvariabele in: Om verbinding te maken, moet u de KUBECONFIG-omgevingsvariabele dienovereenkomstig instellen. export KUBECONFIG=/absolute/path/to/file/k8s-cluster-config.yaml Helm: de Helm CLI is nodig om charts te installeren. Versie 3 is vereist. PostgreSQL implementeren met een Helm-chart Helm is de pakketbeheerder voor Kubernetes, vergelijkbaar met apt voor Ubuntu/Debian. In plaats van afzonderlijke YAML-bestanden te schrijven voor Pods, Services, Volumes, Secrets enz., gebruik je één Helm-opdracht om alles in te stellen. Stap 1: Helm-repository toevoegen helm repo add bitnami https://charts.bitnami.com/bitnami Om uw lokale Helm-repository te synchroniseren met de externe repository: helm repo update Stap 2: Datapersistentie beheren PostgreSQL vereist permanente opslag zodat gegevens behouden blijven bij een herstart of crash van een pod. Maak het bestand postgres-local-pv.yaml aan: apiVersion: v1 kind: PersistentVolume metadata: name: postgresql-local-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: manual hostPath: path: /mnt/data/postgresql ⚠️ Let op: hostPath verwijst naar een lokaal pad op één node — niet geschikt voor productieomgevingen. Gebruik in plaats daarvan cloud-native opslag (bijv. Ceph, OpenEBS, Portworx, GlusterFS) voor betrouwbaarheid en schaalbaarheid. Maak vervolgens postgres-local-pvc.yaml aan: apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgresql-local-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: manual De modus ReadWriteOnce betekent dat slechts één node tegelijk mag schrijven/lezen. ReadWriteMany lijkt aantrekkelijk, maar veroorzaakt bij PostgreSQL risico’s op racecondities en gegevenscorruptie. Pas de manifests toe: kubectl apply -f postgres-local-pv.yamlkubectl apply -f postgres-local-pvc.yaml Stap 3: PostgreSQL installeren met Helm 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 Controleer na enkele minuten: kubectl get all Stap 4: Testen en 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 De pod wordt automatisch verwijderd door de --rm vlag. Pas de waarden aan als je een andere release-naam of database gebruikt. PostgreSQL van nul af aan implementeren op Kubernetes Een StatefulSet is de juiste Kubernetes-resource voor toepassingen met status zoals PostgreSQL. Elk exemplaar krijgt een stabiele netwerkidentiteit en een eigen volume. Schoon eerst bestaande bronnen op: 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 Maak het bestand 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 Maak het Secret voor de databasewachtwoorden: kubectl create secret generic postgresql-secret --from-literal=POSTGRES_PASSWORD=Ze4hahshez6dop9vaing kubectl apply -f postgres-statefulset.yaml Komt de pod niet verder dan Pending? Maak dan een StorageClass aan: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: manual provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer Controleer eventuele fouten: kubectl describe pod postgres-statefulset-0 Maak vervolgens een Headless Service voor interne toegang — bestand 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 Test de verbinding: 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 Schalen, replicatie en back-up Schalen van het StatefulSet: kubectl scale statefulset postgres-statefulset --replicas=3   Je kunt individuele pods bereiken via de headless service, bijv. postgres-statefulset-1.postgresql-headless-svc. Back-ups uitvoeren: maak een CronJob aan met het hulpprogramma pg_dump.VolumeSnapshots zijn ook een optie voor extra zekerheid. Best Practices Resource Requests & Limits instellen: voorkom over- of onderprovisionering. Back-ups plannen met CronJobs of snapshots. Monitoring & logging: gebruik Prometheus + Grafana voor PostgreSQL-statistieken (query-prestaties, schijfgebruik, replicatiestatus). Pod Disruption Budgets (PDB’s) configureren om te voorkomen dat meerdere PostgreSQL-pods tegelijk offline gaan bij updates. Choose your server now! Conclusie Een Helm-chart is de aanbevolen methode voor complexe of productie-implementaties. Helm automatiseert versiebeheer en verbergt de complexiteit van afzonderlijke Kubernetes-componenten. Met helm template kun je het chart lokaal renderen en de YAML-bestanden aanpassen. Conclusie Een Helm-chart is de aanbevolen methode voor complexe of productie-implementaties. Helm automatiseert versiebeheer en verbergt de complexiteit van afzonderlijke Kubernetes-componenten. Met helm template kun je het chart lokaal renderen en de YAML-bestanden aanpassen. Kubernetes biedt schaalbaarheid, flexibiliteit en automatisering voor PostgreSQL-databases. Door gebruik te maken van StatefulSets, PVC’s, PDB’s en Secrets-beheer, kun je een PostgreSQL-omgeving opzetten die klaar is voor productie.
27 October 2025 · 7 min to read

Heb je vragen,
opmerkingen of zorgen?

Onze professionals staan altijd klaar om je te helpen,
of je nu hulp nodig hebt of gewoon niet weet waar te beginnen
E-mail ons
Hostman's Support