2

PostgreSQL 9.2 がインストールされた Debian 3.2 を実行しています。私の同僚がデータベース クラスタを日本語で初期化しました。そのため、ユーザーが誰であるかに関係なく、で作成されたすべてのデータベースcreatedbは、言語として日本語でインスタンス化されるようになりました。

initdb新しいクラスターで再度実行することなく、言語を英語にリセットする方法が見つかりません。ダウンするわけにはいかないデータがたくさんあるので、私は本当にこれをしたくありません。

私が読んだことから、これらのフラグを持つコマンドが呼び出されると、データベースクラスターは日本語で設定されinitdb -D /place/for/data --locale=ja_JPます。ただし、同じクラスターをcreatedb作成してから新しいデータベースを作成すると、エラー メッセージの言語は英語になります。私の同僚のクラスタでは、このシナリオのエラー メッセージは日本語のエラー メッセージを生成します。

PostgreSQL 9.2 でロケールがどのように機能するかを理解してくれる人はいますか? また、クラスタを英語に戻すにはどうすればよいでしょうか?

4

1 に答える 1

3

完全なダンプとリロードを行わないと、クラスターを完全に英語に戻すことはできません。

一般に、postmaster はデータベース クラスタが initdb された言語とエンコーディングでメッセージを発行します。個々のデータベースのセッションは、データベースが作成された言語とエンコーディングでメッセージを発行しますが、これはクラスタのデフォルトとは異なる場合があります。

これにより、混合言語と混合テキスト エンコーディングのログが作成される可能性があり、これは非常に見苦しいものです。メーリング リストで何度も議論を重ねたにもかかわらず、解決方法について合意に達したことはありません。見た目よりも複雑です。

各セッションは独自のロケール設定でログインするため、できることは、マニュアルページに従ってCREATE DATABASE ...適切な設定を行うことです。これを成功させるには、指定する必要がある場合があります。これにより、新しく作成されたデータベースが目的の言語とエンコードになります。次に、各古い DB を対応する新しい DB にダンプし、古い DB の名前を変更し、新しい DB の名前を古い DB の場所に変更できます。古いものは、気分がよくなったら捨てることができます。LC_CTYPEENCODINGLC_COLLATECREATE DATABASETEMPLATE template0

ポストマスター レベルのメッセージは引き続き日本語で表示されます。再initdbなしでそれを回避する方法はないと思います。さらに悪いことに、jp_JP.UTF-8別のエンコーディングではなく、ログ ファイルにエンコーディングが混在している可能性があり、ログ ファイル プロセッサなどを混乱させる可能性があります。

于 2013-06-08T11:35:12.527 に答える