2

"encoding = 'UTF8'" で PostgreSQL にデータベースを作成し、そこにいくつかの UTF8 データをロードしました。選択は正常に機能しますが、クエリで「WHERE UPPER(name) = 'FOO'」を実行しようとするとエラーが発生します

ERROR:  invalid multibyte character for locale

私の調査によると、これは PostgreSQL のインストールが "initdb"LANG=en_USではなくLANG=en_US.UTF8. 「 」を実行すると「SHOW LC_COLLATE」が表示されますen_US。すべてのデータベースをダンプして再作成する必要はありません。データベースのいくつかは PostGIS であり、それらを再作成するのは王様の苦痛だからです。UTF8で機能する「UPPER」に相当する方法のような回避策はありますか?

更新 データベースのダンプ、reinitdb、および復元を行うことになりましたが、思ったよりも簡単でした。 t は PGDATA 環境変数を設定し、私が見つけた構成ファイルやシェル スクリプトも設定しませんでした。

4

2 に答える 2

1

あなたの診断は正しいです。これは PostgreSQL の Unicode に関する一般的な問題です。インストール手順は、それを実行しているシェルのロケールでスマートかつinitdbedしようとしました:-(

データベースをダンプして復元できない場合は、データを大文字にするよりも深刻で緊急な問題があることをお勧めします。私見ですが、新しいバージョンの PostgreSQL が発行された後 (またはハードディスク障害の後) に実際にデータを復元する前に、まずこの問題に対処する必要があります。

于 2009-01-18T13:23:30.643 に答える
1

ご希望の回避策は実現可能ではないと思いますが、PostGIS 対応データベースのダンプと復元はうまくいくはずです。PostGIS 関数を使用してデータベースを定期的にダンプおよび復元し、geom オブジェクトを使用してデータを復元します。

どのような問題がありますか?

于 2009-01-18T08:50:03.877 に答える