PostgreSQL 9.5 nie uruchomi się po jesiennej aktualizacji systemu Windows 10

13

Zainstalowałem aktualizację Windows 10 Fall (1709) i teraz mój serwer PostgreSQL 9.5 nie chce się uruchomić. Działało wczoraj przed aktualizacją i nie wprowadziłem żadnych zmian w konfiguracji.

Sprawdziłem przeglądarkę zdarzeń i znalazłem następujące komunikaty o błędach:

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

Wygląda na to, że Microsoft zmienił nazwę ustawień regionalnych wraz z aktualizacją Fall, nie mogłem znaleźć żadnej listy dostępnych nazw ustawień regionalnych, więc zdecydowałem się zainstalować Postgres 10 i potwierdziło to moje podejrzenie, postgresql.conf w Postgres 10 brzmi teraz:

# 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

Zmieniłem wartości konfiguracji dla serwera PostgreSQL 9.5 na „Czech_Czechia.1250” i zaczęło się dobrze, ale problem polega na tym, że teraz nie mogę się połączyć z żadną bazą danych, pgAdmin III wyświetla następujący błąd:

Błąd pgAdmin

Czy istnieje sposób na odzyskanie danych? Nie mogę utworzyć zrzutu ani uruchomić programu pg_upgrade, ponieważ bazy danych mają teraz nieprawidłowe ustawienia regionalne i nie mogę się z nimi połączyć. Może istnieje sposób na ręczną zmianę ustawień regionalnych bazy danych? Teoretycznie nie powinno to powodować żadnych problemów, ponieważ jest to jedyna inna nazwa dla tego samego kodowania.

jvb
źródło
2
Być może możesz odtworzyć brakujące ustawienia narodowe jako ustawienia niestandardowe za pomocą narzędzia do budowania ustawień regionalnych .
Daniel Vérité

Odpowiedzi:

12

Dzięki sugestii Daniela Vérité udało mi się to naprawić bez zrzucania całego serwera db. Moje rozumienie ustawień narodowych w systemie Windows jest bardzo ograniczone, ale z tego, co się dowiedziałem, wygląda na to, że Microsoft zmienił nazwę regionu z czeskich ustawień narodowych z „Czech” na „Czech” podczas aktualizacji Fall Creators (prawdopodobnie tak, aby był zgodny z ISO 3166-1) .

Postgres w jakiś sposób ładuje ustawienia regionalne przez połączenie nazwy języka i regionu, więc nie można połączyć się z bazami danych utworzonymi przed tą zmianą, ponieważ połączenie języka i regionu nie jest już prawidłowe.

Aby to naprawić, pobrałem Locale Builder 2.0 z firmy Microsoft, a następnie:

  1. Utworzono nowe ustawienia regionalne w oparciu o ustawienia regionalne w Czechach (cs-CZ), zachowano tę samą nazwę ustawień regionalnych (cs-CZ)
  2. Zmieniono nazwę regionu na „Czechy” (z „Czech”)
  3. Utworzono instalatora, wybierając „Kompiluj” -> „Kompilator ustawień regionalnych”
  4. Zainstalowano nowo utworzone ustawienia regionalne, uruchamiając plik .msi utworzony w poprzednim kroku
  5. Zrestartowałem serwer PostgreSQL, tym razem zaczął się bez problemu

Teraz mogę uruchomić PostgreSQL 9.5 z „Czech_Czech Republic.1250” i PostgreSQL 10 z „Czech_Czechia.1250” i oba działają.

Nie jestem pewien, czy tworzenie ustawień regionalnych o tej samej nazwie (cs-CZ) jest w porządku, ale wydaje się, że nie powoduje to żadnych problemów, być może ktoś może opracować więcej.

jvb
źródło