web-dev-qa-db-ja.com

pg_upgrade: "データベース" postgres "のlc_collat​​e値が一致しません"

PostgreSqlとpostGisのインストールを(Homebrewを使用して)アップグレードしました。 「postgresql-upgrade-database」を作成できなくなり(データが「エラー:以前の試行からすでにアップグレードされました」と表示されているため、試行が失敗したため、アップグレードされていません)、手動の「pg_upgrade」ルートを使用します。 'template1'データベースを処理するまでは問題ありません

    lc_collate values for database "postgres" do not match:  old "C", new "en_US.UTF-8"

エラー。私はその 'template1'データベースを作成しなかったので、文字列一致の要件をなんらかの方法でオーバーライドできる場合は、(何らかの理由で必要でない場合は)消費可能です。アドバイスをよろしくお願いします。

7

影響を受けるデータベースが不明です:postgresまたはtemplate1

pg_upgradeを使用するには、新しいクラスターと古いクラスターを同じロケールでインストールする必要があります。だから試してみてください

initdb --locale=C ...

新しいクラスターを作成します。

template1は不可欠なデータベースです。データベースがないと、CREATE DATABASEに問題が発生します。また、postgres管理データベースも保持する必要があります。

両方のデータベースのロケールが異なる場合は、次のように同じ方法で新しいクラスターを作成する必要があります。

DROP DATABASE postgres;
CREATE DATABASE postgres
   LC_COLLATE 'C' LC_CTYPE 'C'
   TEMPLATE template0;
8
Laurenz Albe

これは私のために働いた。 template1template0についても以下のクエリを繰り返します

UPDATE pg_database SET datcollate='C', datctype='UTF-8' WHERE datname='postgres'

4
Santosh