PostgreSQL 9.5は、Windows 10の秋の更新後に起動しません


13

Windows 10 Fallアップデート(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はFallアップデートでロケール名を変更したようです。利用可能なロケール名のリストが見つからなかったため、Postgres 10をインストールすることに決め、疑いを確認しました、Postgres 10の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では次のエラーが表示されます。

pgAdminエラー

データを取り戻す方法はありますか?データベースのロケールが無効になり、接続できないため、ダンプを作成したり、pg_upgradeを実行できません。データベースのロケールを手動で変更する方法はありますか?理論的には、同じエンコーディングに対して名前が異なるだけなので、問題は発生しません。


2
Locale Builderツールを使用して、欠落しているロケールをカスタムロケールとして再作成できます。
ダニエルベリテ

回答:


12

DanielVéritéからの提案のおかげで、dbサーバー全体をダンプすることなく修正できました。Windowsでのロケールの理解は非常に限られていますが、学んだことから、MicrosoftはFall Creatorsの更新中にチェコ語ロケールの地域名を「チェコ共和国」から「チェコ語」に変更したようです(おそらくISO 3166-1に準拠しています) 。

Postgresは言語名と地域名の組み合わせによってロケールを何らかの方法でロードするため、言語と地域の組み合わせが無効になったため、この変更前に作成されたデータベースに接続できません。

それを修正するために、MicrosoftからLocale Builder 2.0をダウンロードし、それから:

  1. チェコ語ロケール(cs-CZ)に基づいて新しいロケールを作成し、同じロケール名(cs-CZ)を保持
  2. 地域名を「チェコ共和国」に変更(「チェコ」から)
  3. [ビルド]-> [ビルドロケールインストーラー]を選択してインストーラーを作成しました
  4. 前の手順で作成された.msiファイルを実行して、新しく作成されたロケールをインストールしました
  5. PostgreSQLサーバーを再起動しました。今回は問題なく起動しました

これで、PostgreSQL 9.5を「Czech_Czech Republic.1250」で実行し、PostgreSQL 10を「Czech_Czechia.1250」で実行でき、両方とも機能します。

同じロケール名(cs-CZ)でロケールを作成しても大丈夫かどうかはわかりませんが、問題は発生しないようです。誰かがさらに詳しく説明できるかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.