質問: WindowsOSへインストールしたPostgresSQLサーバーver.10で、CentOSのようにICU Collationを使用する方法を教えてください。 当方こちらの記事をトレースしたいと考えています。
回答: Windows版の場合でも、`ICU`はインストールされているようで、以下のコマンドには成功しました。 ``` CREATE TABLE t (t text COLLATE "ja-x-icu"); CREATE COLLATION digitslast (provider = icu, locale = 'ja-u-kr-latn-digit'); ``` しかし、以下を実行しても英字が数字の前にきません。 ``` select * from t order by t collate "digitslast"; ``` ドキュメントの 23.2. 照合順序サポートのページには以下の記述があり、エラーにはなっていませんが、照合順序の指定が機能していないと思われます。 > > 設計上、ICUはロケール名としてどのような文字列も受け入れ、ドキュメントで説明されているフォールバック手続きを使って、ICUが提供するもっとも近いロケールにマッチさせます。 > > したがって、インストールされたICUが実際にはサポートしていない機能を使って照合順序の指定が構成されていたとしても、直接にはフィードバックはありません。 > > そういうわけで、照合順序の定義が要件を満たしているかどうかを確認するためのアプリケーションレベルのテストケースを作成することをお勧めします。 > > > この問題は、PostgreSQLをコンパイルする時の`ICU`のリンクの問題と思われるため、修正しようと思ったら`VC++`の知識が必要です。VC++を覚える気がないならば素直にLinux版を使った方がいいです。自分もWindows版でのこのような問題やVC++でコンパイルする難しさに泣かされてきたので、基本Linux版を使うようにしています。 WindowsOSであっても、`WSL`、`Vagrant`、`Docker`等を使えばLinuxを無料で使えるし、PostgreSQLの使用はネットワークでの接続なので、WindowsOS上のアプリからの使用も問題はありません。