PostgreSQL ist eines der populärsten und mächtigsten Datenbankmanagementsysteme und zu dem noch Open Source. Dieser Blog-Artikel erklärt die Installation, Konfiguration und das Aktualisieren von PostgreSQL 16 unter Windows Server 2022.
Einführung
PostgreSQL ist ein freies, objektrelationales Datenbankmanagementsystem, das den größten Teil des SQL-Standards abbildet und diesen um einige Erweiterungen ergänzt. Die Open-Source-Lizenz von PostgreSQL ist sehr liberal und entspricht in etwa der MIT-Lizenz. PostgreSQL läuft unter Windows, Linux, macOS sowie weiteren Unix-Derivaten.
Version 16 wurde am 14. September 2023 veröffentlicht und wird das letzte Update am 09. November 2028 erhalten. Der Lebenszyklus beträgt also wie bei älteren Versionen auch fünf Jahre.
In der Tat haben wir nur positive Erfahrungen mit PostgreSQL gemacht und setzen diese Datenbank daher auch in unserem Open-Source-Projekten ein, wie z.B. Enbrea.
Installation von PostgreSQL 16
Diskussion
Die einfachste Art und Weise PostgreSQL unter Windows zu installieren ist, sich den MSI-Installer hier herunterzuladen und auszuführen. Ich persönlich ziehe jedoch die manuelle Installation vor, da ich hier die exakte Kontrolle über das habe, was ich wirklich brauche. So möchte ich beispielsweise das Administrationswerkzeug pgAdmin nicht auf dem gleichen Computer installiert haben. Außerdem ist das Aktualisieren von PostgreSQL aus meiner Sicht so transparenter und sicherer.
Dieser Blog-Artikel beschreibt daher auch die manuelle Installation von PostgreSQL 16 per Kommandozeile.
Vorbereitung
Die vorbereitenden Schritte sehen wie folgt aus:
-
Installiere das Visual C++ 2015-2022 Redistributable Package. Nimm die 64-Bit-Version, also
vc_redist.x64.exe
. -
Lade die aktuellen Windows x64 binaries (als Zip-Archiv) für PostgreSQL 16 herunter. Zum Zeitpunkt des Schreibens dieses Artikels ist dies die Version 16.4.
-
Lege einen Ordner mit Namen
C:\Program Files\PostgreSQL
an und gib Dir volle Windows-Zugriffsrechte auf diesen Ordner. -
Extrahiere das Zip-Archiv nach
C:\Program Files\PostgreSQL
. Das dauert etwas, also Geduld. -
Benenne den neu angelegten Unterordner
pgsql
um in16
. -
Lösche die Ordner
pgAdmin 4
undStackBuilder
samt ihren Inhalten. pgAdmin können wir separat installieren und StackBuilder wird nicht benötigt. -
Lege einen neuen Ordner
c:\Workspace\PostgreSQL\16
(dieser Ordner kann natürlich auch anders heissen) und dort die Unterordnerdata
undlog
an. -
Überprüfe die landesspezifischen Einstellungen auf Deinem Windows Server (also Sprache, Region, Zeitzone etc.) und aktualisiere sie bei Bedarf. PostgreSQL nimmt diese Einstellungen als Grundlage bei der Initialisierung einer neuen Server-Instanz.
Initialisierung
Alles ist vorbereitet, Du kannst nun einen neuen Datenbank-Cluster initialisieren. Ein Datenbank-Cluster umfasst alle Datenbanken, die von einer einzelnen PostgreSQL-Server-Instanz verwaltet werden.
Öffne Die Windows-Kommandozeile als Administrator und führe folgenden Befehl aus:
"C:\Program Files\PostgreSQL\16\bin\initdb" -U postgres -W -A scram-sha-256 -E utf8 -D "C:\Workspace\PostgreSQL\16\data"
Der Befehl initdb initialisiert einen Cluster mit einem Superuser namens postgres
. Als Authentifizierungsmethode haben wir SCRAM-SHA-256 definiert. Sie wird von PostgreSQL als die sicherste Kennwort-basierte Methode empfohlen. Die Standard-Textkodierung haben wir auf UTF-8 konfiguriert.
Während der Ausführung wirst Du aufgefordert, ein Kennwort für den Superuser zu vergeben.
Sollte während der Ausführung folgender Fehler auftreten…
initdb: error: could not change permissions of directory "C:/Workspace/PostgreSQL/16/data": Permission denied
…, dann musst Du Deine Zugriffsrechte überprüfen und anpassen. Danach führe den initdb
-Befehl von oben erneut aus.
Den Server starten und stoppen
Nach erfolgreicher Ausführung kannst Du den PostgreSQL-Server starten:
"C:\Program Files\PostgreSQL\16\bin\pg_ctl" -D "C:\Workspace\PostgreSQL\16\data" -l "C:\Workspace\PostgreSQL\16\log\pgsql.log" start
Möchtest Du den PostgreSQL-Server wieder stoppen, tippe folgendes ein:
"C:\Program Files\PostgreSQL\16\bin\pg_ctl" -D "C:\Workspace\PostgreSQL\16\data" stop
Der Server als Windows-Dienst
Unter Windows möchte man PostgreSQL natürlich als Windows-Dienst laufen lassen. Dazu musst Du zunächst den PostgreSQL-Server als Dienst registrieren:
"C:\Program Files\PostgreSQL\16\bin\pg_ctl.exe" register -N "PostgreSQL-16" -U "NT AUTHORITY\NetworkService" -D "C:\Workspace\PostgreSQL\16\data" -w
Vergebe volle Zugriffsrechte für Systembenutzer NetworkService auf den Ordner C:\Workspace\PostgreSQL\16
.
Nun kannst Du den Dienst starten:
net start "PostgreSQL-16"
So stoppst Du den Dienst wieder:
net stop "PostgreSQL-16"
Und so machst Du die Registrierung wieder rückgängig:
"C:\Program Files\PostgreSQL\16\bin\pg_ctl.exe" unregister -N "PostgreSQL-16"
Lokalisierung
In der PostgreSQL-Konfigurationsdatei data\postgresql.conf
kannst Du die Sektion CLIENT CONNECTION DEFAULTS
auf Deine Bedürfnisse anpassen.
Zwei interessante Parameter sind datestyle
und timezone
. Ist Dein Windows-Server beispielsweise auf Englisch eingestellt, kannst Du beide Parameter auf Deutsch umstellen:
datestyle = 'iso, dmy'
timezone = 'CET'
Vergiss bitte nicht, den PostgreSQL-Server nach jeder Änderung in data\postgresql.conf
neu zu starten.
Updates einspielen
Die Versionsnummern von PostgreSQL bestehen seit Version 10 immer aus einer Major-Nummer und einer Minor-Nummer.
Beispiel: In der Versionsnummer 16.4 ist 16 die Major-Nummer und 4 die Minor-Nummer.
Aktualisierung zwischen Minor-Versionen
Bei einer Aktualisierung von PostgreSQL zwischen zwei Minor-Versionen, also z.B. von 16.2 auf 16.4, kannst Du einfach den PostgreSQL-Server stoppen, die Binärdateien austauschen und danach den PostgreSQL-Server wieder starten. Die Datenbankdateien bleiben unverändert. Grundsätzlich sollte man regelmäßig auf die neueste Minor-Version aktualisieren.
Aktualisierung zwischen Major-Versionen
Bei einer Aktualisierung von PostgreSQL zwischen zwei Major-Versionen, also z.B. von 14.11 auf 16.4, ist es etwas komplizierter, da alle Datenbanken migriert werden müssen.
Die Vorgehensweise besteht ganz grob aus drei Schritten:
-
Installiere den neuen PostgreSQL-Server parallel zum bisherigen PostgreSQL-Server in einem neuen Unterordner.
-
Führe eine Migration der Datenbanken durch.
-
Deinstalliere den bisherigen PostgreSQL-Server.
Beispielhafte Aktualisierung von 14.11 auf 16.4:
-
Stoppe PostgreSQL 14.11.
-
Installiere und konfiguriere PostgreSQL 16.4.
-
Stoppe PostgreSQL 16.4. Es ist jetzt wichtig, dass beide Server (14.11 und 16.4) nicht mehr ausgeführt werden.
-
Konfiguriere eine temporäre
trust-authentication
bei beiden Servern. Öffne dazu die Datei..\data\pg_hba.conf
bei beiden Servern und setzeMETHOD
für IP4 und IP6 auftrust
.Bitte vergiss nicht, diese Änderung nach erfolgreicher Datenbankmigration wieder rückgängig zu machen.
Jetzt haben wir zwei PostgreSQL-Versionen nebeneinander liegen. Wir können die Migration der Datenbanken von 14.11 nach 16.4 starten. Öffne dazu die Windows-Kommandozeile als Administrator und tippe folgendes ein:
"C:\Program Files\PostgreSQL\16\bin\pg_upgrade.exe" -U postgres --old-bindir "C:\Program Files\PostgreSQL\14\bin" --new-bindir "C:\Program Files\PostgreSQL\16\bin" --old-datadir "C:\Workspace\PostgreSQL\14\data" --new-datadir "C:\Workspace\PostgreSQL\16\data"
Die Datenbankmigration wird gestartet. Das kann je nach Anzahl und Größe der Datenbanken etwas dauern.
Wenn erfolgreich beendet, kannst Du den neuen PostgreSQL-Server starten und mit ihm arbeiten. Wenn Du Dir absolut sicher bist, dass alles in Ordnung ist, kannst Du den alten PostgreSQL-Server komplett löschen.
Sollte während der Datenbankmigration folgender Fehler auftreten…
The source cluster was not shut down cleanly, state reported as: "shutting down"
Failure, exiting
…, hat sich folgendes Vorgehen bewährt:
-
Die alte PostgreSQL-Version starten:
net start "PostgreSQL-14"
Das dauert etwas, weil PostgreSQL versucht, wieder auf die Reihe zu kommen.
-
Danach gleich wieder stoppen:
net stop "PostgreSQL-14"
Das sollte den Fehler beheben.
Daten- und Log-Ordner verschieben
Das nachträgliche Verschieben der Ordner data
und log
ist jederzeit möglich.
Zunächst musst Du PostgreSQL stoppen. Öffne dazu die Windows-Kommandozeile als Administrator und führe folgenden Befehl aus:
net stop "PostgreSQL-16"
Jetzt verschieben wir die Ordner beispielhaft von C:\Workspace\PostgreSQL\16
nach D:\Databases\PostgreSQL\16
:
-
Verschiebe den Ordner
C:\Workspace\PostgreSQL\16\data
nachD:\Databases\PostgreSQL\16\data
. -
Verschiebe den Ordner
C:\Workspace\PostgreSQL\16\log
nachD:\Databases\PostgreSQL\16\log
. -
Vergebe volle Zugriffsrechte für Systembenutzer NetworkService auf den Ordner
D:\Databases\PostgreSQL\16
.
Als nächstes müssen wir die Konfiguration von PostgreSQL anpassen:
-
Öffne die Datei
D:\Databases\PostgreSQL\16\data\postgresql.conf
in einem Texteditor Deiner Wahl. -
Setze die Variable auf
data_directory = D:/Databases/PostgreSQL/16/data
(Bitte achte auf die geforderten Schrägstriche). -
Setze die Variable auf
log_directory = D:/Databases/PostgreSQL/16/log
(Bitte achte auf die geforderten Schrägstriche). -
Speichere die Textdatei.
Der letzte Schritt ist die passende Konfigurierung des Windows-Dienstes:
-
Öffne die Windows-Registry und wähle den Schlüssel
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PostgreSQL-16
aus. -
Setze den Wert von
ImagePath
auf"C:\Program Files\PostgreSQL\16\bin\pg_ctl.exe" runservice -N "PostgreSQL-16" -D "D:\Databases\PostgreSQL\16\data" -w
.
Jetzt können wir PostgreSQL wieder starten:
net start "PostgreSQL-16"
Administrationswerkzeuge
psql
Wer mal eben schnell einen SQL-Befehl loswerden möchte, kann sich lokal per psql (PostgreSQL interactive terminal) anmelden.
Tipp dazu folgendes in die Eingabeaufforderung ein:
C:\Program Files\PostgreSQL\16\bin\psql.exe" -U postgres
Du wirst zunächst nach dem Kennwort für den PostgreSQL-Benutzer postgres
gefragt:
Passwort für Benutzer postgres:
Dann erscheint folgende Eingabeaufforderung:
psql (16.4)
Geben Sie »help« für Hilfe ein.
postgres=#
Als kleines Beispiel wollen wir jetzt die aktuelle Version von PostgreSQL per SQL erfragen:
postgres=# SELECT version();
Um psql wieder zu verlassen, gibt man \q
ein und bestätigt.
pgAdmin
pgAdmin ist eine freie Open-Source-Software mit einer grafischen Oberfläche, um PostgreSQL-Datenbanken zu entwickeln und zu administrieren. pgAdmin 4 läuft unter Windows, Linux, macOS sowie weiteren Unix-Derivaten. Unterstützt werden alle Versionen von PostgreSQL, deren Lebenszyklus noch nichtg abgelaufen ist (siehe PostgreSQL Versioning Policy).
Du kannst pgAdmin auf Deinem lokalen Computer installieren und per SSH auf die PostgreSQL-Instanz Deines Windows-Server zugreifen. Eine ausführliche Installationsanleitung für Windows findest Du in diesem Blog-Artikel.
Artikelhistorie
- 20.02.2020
- Erstveröffentlichung
- 16.07.2022
- Update auf PostgreSQL 14 und Windows Server 2022
- Zusätzlicher Abschnitt zu Administrationswerkzeugen
- Kleinere Korrekturen
- 26.08.2024
- Update auf PostgreSQL 16
- Kleinere Ergänzungen/Korrekturen