Windows 10 Fall update(1709)をインストールしましたが、PostgreSQL 9.5サーバーが起動しません。更新前の昨日は動作しましたが、構成に変更を加えていません。
イベントビューアを確認したところ、次のエラーメッセージが見つかりました。
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は秋のアップデートでロケール名を変更したようですが、利用可能なロケール名のリストが見つからなかったため、Postgres 10をインストールすることを決定し、疑いを確認しました。Postgres10のpostgresql.confは次のようになります。
# 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
PostgreSQL 9.5サーバーの設定値を「Czech_Czechia.1250」に変更して問題なく起動しましたが、問題はどのデータベースにも接続できなくなったことです。pgAdminIIIで次のエラーが発生します。
データを取り戻す方法はありますか?データベースのロケールが無効になり、データベースに接続できないため、ダンプを作成したり、pg_upgradeを実行したりできません。たぶん、データベースのロケールを手動で変更する方法はありますか?理論的には、同じエンコーディングに対して名前が異なるだけなので、問題は発生しません。
DanielVéritéからの提案のおかげで、dbサーバー全体をダンプすることなく修正できました。 Windowsでのロケールの理解は非常に限られていますが、私が学んだことから、Fall Creatorsの更新中に、Microsoftはチェコ語ロケールの地域名を「チェコ共和国」から「チェコ語」に変更したようです(おそらくISO 3166-1に準拠しているため) 。
Postgresは何らかの方法で言語名と地域名の組み合わせでロケールを読み込みます。そのため、言語と地域の組み合わせが無効になるため、この変更前に作成されたデータベースには接続できません。
だからそれを修正するために、私は Locale Builder 2. をMicrosoftからダウンロードし、それから:
これで、「Czech_Czech Republic.1250」でPostgreSQL 9.5を実行し、「Czech_Czechia.1250」でPostgreSQL 10を実行できます。どちらも機能します。
同じロケール名(cs-CZ)でロケールを作成してもよいかどうかはわかりませんが、問題が発生するようには見えません。誰かがもっと詳しく説明できるかもしれません。