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 10 unter Windows Server 2019.
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 10 wurde am 5. Oktober 2017 veröffentlicht und wird das letzte Update am 10. November 2022 erhalten.
In der Tat haben wir nur positive Erfahrungen mit PostgreSQL gemacht und setzen diese Datenbank daher auch in unserem Open-Source-Projekt Enbrea ein.
Installation von PostgreSQL 10
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 10 per Kommandozeile.
Vorbereitung
Die vorbereitenden Schritte sehen wie folgt aus:
-
Installiere das Visual C++ 2013 Redistributable Package. Nimm die 64-Bit-Version, also
vc_redist.x64.exe
. -
Lade die aktuellen Windows x64 binaries (ein Zip-Archiv) für PostgreSQL 10 herunter. Zum Zeitpunkt des Schreibens dieses Artikels ist dies die Version 10.11.
-
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 in10
. -
Lösche die Ordner
pgAdmin 4
undStackBuilder
samt ihren Inhalten. pgAdmin wollen wir separat installieren und StackBuilder wird nicht benötigt. -
Lege einen neuen Ordner
c:\Workspace\PostgreSQL\10
(dieser Ordner kann natürlich auch anders heissen) und dort die Unterordnerdata
undlog
an. -
Überprüfe die landesspezifischen Einstellungen auf Deinem Windows Server 2019 (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\10\bin\initdb" -U postgres -W -A scram-sha-256 -E utf8 -D "C:\Workspace\PostgreSQL\10\data"
Dieser Befehl 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.
Den Server starten und stoppen
Nach erfolgreicher Ausführung kannst Du den PostgreSQL-Server starten:
"C:\Program Files\PostgreSQL\10\bin\pg_ctl" -D "C:\Workspace\PostgreSQL\10\data" -l "C:\Workspace\PostgreSQL\10\log\pgsql.log" start
Möchtest Du den PostgreSQL-Server wieder stoppen, tippe folgendes ein:
"C:\Program Files\PostgreSQL\10\bin\pg_ctl" -D "C:\Workspace\PostgreSQL\10\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\10\bin\pg_ctl.exe" register -N "PostgreSQL-10" -U "NT AUTHORITY\NetworkService" -D "C:\Workspace\PostgreSQL\10\data" -w
Vergebe volle Zugriffsrechte für Systembenutzer NetworkService auf den Ordner C:\Workspace\PostgreSQL\10
.
Nun kannst Du den Dienst starten:
net start "PostgreSQL-10"
So stoppst Du den Dienst wieder:
net stop "PostgreSQL-10"
Und so machst Du die Registrierung wieder rückgängig:
"C:\Program Files\PostgreSQL\10\bin\pg_ctl.exe" unregister -N "PostgreSQL-10"
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 10.11 ist 10 die Major-Nummer und 11 die Minor-Nummer.
Aktualisierung zwischen Minor-Versionen
Bei einer Aktualisierung von PostgreSQL zwischen zwei Minor-Versionen, also z.B. von 10.5 auf 10.11, kannst Du einfach den PostgreSQL-Server stoppen, die Binärdateien austauschen und danach den PostgreSQL-Server wieder starten. Die Datenbankdateien bleiben unverändert.
Aktualisierung zwischen Major-Versionen
Bei einer Aktualisierung von PostgreSQL zwischen zwei Major-Versionen, also z.B. von 9.6 auf 10.11, 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 9.6 auf 10.11:
-
Stoppe PostgreSQL 9.6.
-
Installiere und konfiguriere PostgreSQL 10.11.
-
Stoppe PostgreSQL 10.11. Es ist jetzt wichtig, dass beide Server (9.6 und 10.11) 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 9.6 nach 10.11 starten. Öffne dazu die Windows-Kommandozeile als Administrator und tippe folgendes ein:
"C:\Program Files\PostgreSQL\10\bin\pg_upgrade.exe" -U postgres --old-bindir "C:\Program Files\PostgreSQL\9.6\bin" --new-bindir "C:\Program Files\PostgreSQL\10\bin" --old-datadir "C:\Program Files\PostgreSQL\9.6\data" --new-datadir "C:\Workspace\PostgreSQL\10\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.
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-10"
Jetzt verschieben wir die Ordner beispielhaft von C:\Workspace\PostgreSQL\10
nach D:\Databases\PostgreSQL\10
:
-
Verschiebe den Ordner
C:\Workspace\PostgreSQL\10\data
nachD:\Databases\PostgreSQL\10\data
. -
Verschiebe den Ordner
C:\Workspace\PostgreSQL\10\log
nachD:\Databases\PostgreSQL\10\log
. -
Vergebe volle Zugriffsrechte für Systembenutzer NetworkService auf den Ordner
D:\Databases\PostgreSQL\10
.
Als nächstes müssen wir die Konfiguration von PostgreSQL anpassen:
-
Öffne die Datei
D:\Databases\PostgreSQL\10\data\postgresql.conf
in einem Texteditor Deiner Wahl. -
Setze die Variable auf
data_directory = D:/Databases/PostgreSQL/10/data
(Bitte achte auf die geforderten Schrägstriche). -
Setze die Variable auf
log_directory = D:/Databases/PostgreSQL/10/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-10
aus. -
Setze den Wert von
Image
auf"C:\Program Files\PostgreSQL\10\bin\pg_ctl.exe" runservice -N "PostgreSQL-10" -D "D:\Databases\PostgreSQL\10\data"
.
Jetzt können wir PostgreSQL wieder starten:
net start "PostgreSQL-10"
Fazit
PostgreSQL lässt sich auf unterschiedliche Art und Weise installieren. Wir haben hier die manuelle Installation der Binärdateien unter Windows beispielhaft beschrieben. Um mit PostgreSQL effizient arbeiten zu können, benötigt man in der Regel noch ein grafisches Adminisrationswerkzeug. Erste Option ist das bereits erwähnte pgAdmin. Die Installation von pgAdmin ist Thema eines separaten Blog-Artikels.
Artikelhistorie
- 17.11.2019
- Erstveröffentlichung
- 19.02.2020
- Log- und Data-Ordner immer außerhalb des Programmordners anlegen
- Kleinere Korrekturen