PostgreSQL 9.5 wird nach dem Update auf Windows 10 nicht mehr gestartet

13

Ich habe das Windows 10 Fall-Update (1709) installiert und jetzt startet mein PostgreSQL 9.5-Server nicht mehr. Es hat gestern vor dem Update funktioniert und ich habe keine Änderungen an der Konfiguration vorgenommen.

Ich habe die Ereignisanzeige überprüft und folgende Fehlermeldungen gefunden:

2017-10-19 11:32:32 CEST LOG:  invalid value for parameter "lc_monetary": "Czech_Czech Republic.1250"
2017-10-19 11:32:32 CEST LOG:  invalid value for parameter "lc_numeric": "Czech_Czech Republic.1250"
2017-10-19 11:32:32 CEST LOG:  invalid value for parameter "lc_time": "Czech_Czech Republic.1250"
2017-10-19 11:32:32 CEST FATAL:  configuration file "C:/Program Files/PostgreSQL/9.5/data/postgresql.conf" contains errors

Microsoft hat anscheinend den Namen des Gebietsschemas mit dem Herbstupdate geändert. Ich konnte keine Liste der verfügbaren Gebietsschemas finden, daher habe ich mich für die Installation von Postgres 10 entschieden. Dies bestätigte meinen Verdacht, dass die postgresql.conf in Postgres 10 nun lautet:

# These settings are initialized by initdb, but they can be changed.
lc_messages = 'Czech_Czechia.1250'          # locale for system error message
                # strings
lc_monetary = 'Czech_Czechia.1250'          # locale for monetary formatting
lc_numeric = 'Czech_Czechia.1250'           # locale for number formatting
lc_time = 'Czech_Czechia.1250'              # locale for time formatting

Ich habe die Konfigurationswerte für den PostgreSQL 9.5-Server in 'Czech_Czechia.1250' geändert und es wurde ordnungsgemäß gestartet. Das Problem ist jedoch, dass ich jetzt keine Verbindung zu einer Datenbank herstellen kann. PgAdmin III gibt folgende Fehlermeldung aus:

pgAdmin-Fehler

Gibt es eine Möglichkeit, die Daten zurückzugewinnen? Ich kann kein Dump erstellen oder pg_upgrade ausführen, da die Datenbanken jetzt ein ungültiges Gebietsschema haben und ich keine Verbindung zu ihnen herstellen kann. Vielleicht gibt es eine Möglichkeit, das Gebietsschema der Datenbank manuell zu ändern? Theoretisch sollte es keine Probleme verursachen, da es nur einen anderen Namen für dieselbe Codierung gibt.

jvb
quelle
2
Möglicherweise können Sie das fehlende Gebietsschema mit dem Tool Locale Builder als benutzerdefiniertes Gebietsschema neu erstellen .
Daniel Vérité

Antworten:

12

Dank eines Vorschlags von Daniel Vérité konnte ich das Problem beheben, ohne den gesamten Datenbankserver zu sichern. Mein Verständnis von Gebietsschemata unter Windows ist sehr begrenzt, aber nach dem, was ich erfahren habe, hat Microsoft den Regionsnamen des tschechischen Gebietsschemas während des Fall Creators-Updates von "Czech Republic" in "Czechia" geändert (vermutlich gemäß ISO 3166-1). .

Postgres lädt das Gebietsschema irgendwie durch die Kombination von Sprachenname und Regionsname, sodass vor dieser Änderung erstellte Datenbanken nicht mehr verbunden werden können, da die Kombination von Sprache und Region nicht mehr gültig ist.

Um das Problem zu beheben, habe ich Locale Builder 2.0 von Microsoft heruntergeladen und dann:

  1. Erstellt ein neues Gebietsschema basierend auf dem tschechischen Gebietsschema (cs-CZ), behält den gleichen Gebietsschemanamen (cs-CZ)
  2. Name der Region in "Tschechische Republik" geändert (von "Tschechien")
  3. Erstellt Installer durch Auswahl von "Build" -> "Build Locale Installer"
  4. Das neu erstellte Gebietsschema wurde installiert, indem die im vorherigen Schritt erstellte MSI-Datei ausgeführt wurde
  5. Der PostgreSQL-Server wurde neu gestartet, diesmal ohne Probleme

Jetzt kann ich PostgreSQL 9.5 mit 'Czech_Czech Republic.1250' und PostgreSQL 10 mit 'Czech_Czechia.1250' ausführen und beide funktionieren.

Ich bin nicht sicher, ob es in Ordnung ist, das Gebietsschema mit demselben Gebietsschemanamen (cs-CZ) zu erstellen, aber es scheint keine Probleme zu verursachen, vielleicht kann jemand mehr ausarbeiten.

jvb
quelle