web-dev-qa-db-ja.com

Windows 10の秋のアップデート後にPostgreSQL 9.5が起動しません

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で次のエラーが発生します。

pgAdmin error

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

13
jvb

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

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

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

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

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

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

12
jvb