PostgreSQL 12 unter Windows 2019

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 12 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.

Die aktuelle Version 12 wurde am 3. Oktober 2019 veröffentlicht und wird das letzte Update am 14. November 2024 erhalten. Die Lebenszyklus beträgt also wie bei älteren Versionen auch fünf Jahre.

Die PostgresSQL-Homepage

Die PostgresSQL-Homepage

In der Tat haben wir nur positive Erfahrungen mit PostgreSQL gemacht und setzen diese Datenbank daher auch in unserem Open-Source-Projekt ENBREA ein. ENBREA ist kompatibel mit PostgreSQL in den Versionen 10 bis 12.

Installation von PostgreSQL 12

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 12 per Kommandozeile.

Vorbereitung

Die vorbereitenden Schritte sehen wie folgt aus:

  1. Installiere das Visual C++ 2015 Redistributable Package. Nimm die 64-Bit-Version, also vc_redist.x64.exe.

  2. Lade die aktuellen Windows x64 binaries (ein Zip-Archiv) für PostgreSQL 12 herunter. Zum Zeitpunkt des Schreibens dieses Artikels ist dies die Version 12.2.

  3. Lege einen Ordner mit Namen C:\Program Files\PostgreSQL an und gib Dir volle Windows-Zugriffsrechte auf diesen Ordner.

  4. Extrahiere das Zip-Archiv nach C:\Program Files\PostgreSQL. Das dauert etwas, also Geduld.

  5. Benenne den neu angelegten Unterordner pgsql um in 12.

  6. Lösche die Ordner pgAdmin 4 und StackBuilder samt ihren Inhalten. pgAdmin wollen wir separat installieren und StackBuilder wird nicht benötigt.

  7. Lege einen neuen Ordner c:\Workspace\PostgreSQL\12 (dieser Ordner kann natürlich auch anders heissen) und dort die Unterordner data und log an.

  8. Ü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\12\bin\initdb" -U postgres -W -A scram-sha-256 -E utf8 -D "C:\Workspace\PostgreSQL\12\data"

Dieser Befehl initialisiert einen Cluster mit einem Superuser namens postgres. Als Authentifizierungsmethode haben wir CRAM-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/12/data": Permission denied

…, dann musst Du die 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\12\bin\pg_ctl" -D "C:\Workspace\PostgreSQL\12\data" -l "C:\Workspace\PostgreSQL\12\log\pgsql.log" start

Möchtest Du den PostgreSQL-Server wieder stoppen, tippe folgendes ein:

"C:\Program Files\PostgreSQL\12\bin\pg_ctl" -D "C:\Workspace\PostgreSQL\12\data" -l "C:\Workspace\PostgreSQL\12\log\pgsql.log" 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\12\bin\pg_ctl.exe" register -N "PostgreSQL-12" -U "NT AUTHORITY\NetworkService" -D "C:\Workspace\PostgreSQL\12\data" -w

Vergebe volle Zugriffsrechte für den Systembenutzer NETWORK SERVICE auf den Ordner C:\Workspace\PostgreSQL\12.

Nun kannst Du den Dienst starten:

net start "PostgreSQL-12"

So stoppst Du den Dienst wieder:

net stop "PostgreSQL-12"

Und so machst Du die Registrierung wieder rückgängig:

"C:\Program Files\PostgreSQL\12\bin\pg_ctl.exe" unregister -N "PostgreSQL-12"

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 12 immer aus einer Major-Nummer und einer Minor-Nummer.

Beispiel: In der Versionsnummer 12.2 ist 12 die Major-Nummer und 2 die Minor-Nummer.

Aktualisierung zwischen Minor-Versionen

Bei einer Aktualisierung von PostgreSQL zwischen zwei Minor-Versionen, also z.B. von 12.1 auf 12.2, 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 10.11 auf 12.2, ist etwas komplizierter, da alle Datenbanken migriert werden müssen.

Die Vorgehensweise besteht ganz grob aus drei Schritten:

  1. Installiere den neuen PostgreSQL-Server parallel zum bisherigen PostgreSQl-Server in einem neuen Unterordner.

  2. Führe eine Migration der Datenbanken durch.

  3. Deinstalliere den bisherigen PostgreSQL-Server.

Beispielhafte Aktualisierung von 10.11 auf 12.2:

  1. Stoppe PostgreSQL 10.11.

  2. Installiere und konfiguriere PostgreSQL 12.2.

  3. Stoppe PostgreSQL 12.2. Es ist jetzt wichtig, dass beide Server (10.11 auf 12.2) nicht mehr ausgeführt werden.

  4. Konfiguriere eine temporäre trust-authentication bei beiden Servern. Öffne dazu die Datei ..\data\pg_hba.conf bei beiden Servern und setze METHOD für IP4 und IP6 auf trust.

    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 10.11 nach 12.2 starten. Öffne dazu die Windows-Kommandozeile als Administrator und tippe folgendes ein:

"C:\Program Files\PostgreSQL\12\bin\pg_upgrade.exe" -U postgres --old-bindir "C:\Program Files\PostgreSQL\10\bin" --new-bindir "C:\Program Files\PostgreSQL\12\bin" --old-datadir "C:\Workspace\PostgreSQL\10\data" --new-datadir "C:\Workspace\PostgreSQL\12\data"

Die Datenbankmigration wird gestartet. Das kann je nach Anzahl und Größe der Datenbanken etwas dauern.

Wenn erfolgreich beendet, kannst Du den neuen PostgSQL-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-12"

Jetzt verschieben wir die Ordner beispielhaft von C:\Workspace\PostgreSQL\12 nach D:\Databases\PostgreSQL\12:

  1. Verschiebe den Ordner C:\Workspace\PostgreSQL\12\data nach D:\Databases\PostgreSQL\12\data.

  2. Verschiebe den Ordner C:\Workspace\PostgreSQL\12\log nach D:\Databases\PostgreSQL\12\log.

  3. Vergebe volle Zugriffsrechte für Systembenutzer NETWORK SERVICE auf den Ordner D:\Databases\PostgreSQL\12.

Als nächstes müssen wir die Konfiguration von PostgreSQL anpassen:

  1. Öffne die Datei D:\Databases\PostgreSQL\12\data\postgresql.conf in einem Texteditor Deiner Wahl.

  2. Setze die Variable auf data_directory = D:/Databases/PostgreSQL/12/data (Bitte achte auf die geforderten Schrägstriche).

  3. Setze die Variable auf log_directory = D:/Databases/PostgreSQL/12/log (Bitte achte auf die geforderten Schrägstriche).

  4. Speichere die Textdatei.

Der letzte Schritt ist die passende Konfigurierung des Windows-Dienstes:

  1. Öffne die Windows-Registry und wähle den Schlüssel Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PostgreSQL-12 aus.

  2. Setze den Wert von Image auf "C:\Program Files\PostgreSQL\12\bin\pg_ctl.exe" runservice -N "PostgreSQL-12" -D "D:\Databases\PostgreSQL\12\data".

Jetzt können wir PostgreSQL wieder starten:

net start "PostgreSQL-12"

Fazit

PostgreSQL 12 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.

Das könnte dich auch interessieren:
  1. PostgreSQL 10: Backups erstellen
  2. pgAdmin 4 unter Windows 10
  3. PostgreSQL 10 unter Windows 2019
  4. GitHub + SSH unter Windows 10
  5. Windows 2019 per SSH fernsteuern
Teile diesen Artikel
comments powered by Disqus