9

Heroku で Basic データベース プランを使用しています。これは、ロケールをサポートする Postgres 9.1 で実行されます。文字 ÅÄÖ が適切に処理されないため、アプリでの並べ替えに問題があります (スウェーデンでは適切です)。

設定する設定はLC_COLLATE、文字列の順序を処理する です。問題は、Heroku でこれを設定する方法が見つからないことです。作成されたデータベースは を取得しますがlc_collate=en_US.UTF-8、それを に設定する必要がありsv_SE.UTF-8ます。

このLC_COLLATE設定は、データベースが作成されたときに変更できないため、psql コンソールから変更することはできません。

それで、どうすればこれを設定できますか?

4

2 に答える 2

7

データベースのデフォルトの照合を変更できないことは正しいです。LC_COLLATEは、Heroku データベース サーバーに設定された環境変数であり、ユーザーの制御外にあり、データベースが作成される前に既に設定されています。ただし、個々の列のデフォルトの照合を設定できます。

CREATE TABLE new_table (
    foo varchar COLLATE "sv_SE.UTF-8",
    bar varchar COLLATE "sv_SE.UTF-8"
);

ALTER TABLE existing_table ALTER COLUMN baz TYPE varchar COLLATE "sv_SE.UTF-8";

詳細については、22.2 を参照してください。PostgreSQL マニュアルの照合サポート。

最初に必要な場合とそうでない場合がありCREATE COLLATIONます。さらに、これはすべて、適切なロケール データがインストールされている Heroku データベース サーバーに依存します。

それができない場合は、もちろん、必要なカスタム セットアップを使用して、EC2 で独自の PostgreSQL インスタンスを実行できます。これには管理時間の投資が必要になりますが、9.1 の実行は、ストリーミング レプリケーションを含めても、かなり簡単です。さらに安くなる場合もあります。欠点は、データベースを実行し続けることが、Heroku 運用チームの問題ではなく、自分の問題になることです。

于 2012-09-09T03:23:55.043 に答える