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

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 der Version 10, daher konzentrieren wir uns in diesem Blog-Artikel bewusst auf diese Version. PostgreSQL 9 oder älter unterstützen wir nicht.

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:

  1. Installiere das Visual C++ 2013 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 10 herunter. Zum Zeitpunkt des Schreibens dieses Artikels ist dies die Version 10.11.

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

  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\10 (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\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:

  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 9.6 auf 10.11:

  1. Stoppe PostgreSQL 9.6.

  2. Installiere und konfiguriere PostgreSQL 10.11.

  3. Stoppe PostgreSQL 10.11. Es ist jetzt wichtig, dass beide Server (9.6 und 10.11) 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 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:

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

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

  3. 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:

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

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

  3. Setze die Variable auf log_directory = D:/Databases/PostgreSQL/10/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-10 aus.

  2. 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
Das könnte dich auch interessieren:
  1. TLS unter IIS 10 absichern
  2. Windows 10 wiederherstellen
Teile diesen Artikel
comments powered by Disqus