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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.