デフォルトのエンコーディングとして LATIN1 を使用するように設定された Postgres インストールがあります。ただし、本番データベースでは UTF8 を使用する必要があります (Heroku でホストされているため、これには選択の余地がありません)。
これを正しく設定するために、ローカル dev データベースを作成しました。
sudo createdb -Upostgres $PROJECT_NAME --template=template0 \
--encoding=UTF8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8
ただし、テスト データベースはデフォルトの Postgres クラスター設定 (LATIN1) を使用するだけでテストが失敗するため、django テストを実行できません (一部のテンプレートに無効な文字があります - ...character 0xe28099 of encoding "UTF8" has no equivalent in "LATIN1"
) 。
「nuclear」オプションは、Postgres を正しい (en_US.UTF8) 設定で再インストールすることですが、これを VM で実行しているため、VM を起動するたびにこれを行う必要はありません。そもそも Django をマッサージしてデータベースを正しく作成する方法があれば、それが望ましいでしょう。
[更新 1: TEST_ENCODING]
@sneawo の提案に従って、データベースの TEST_ENCODING 属性を設定したところ、次のエラーが発生しました。
Creating test database for alias 'default'...
Got an error creating the test database: encoding UTF8 does not match locale en_US
DETAIL: The chosen LC_CTYPE setting requires encoding LATIN1.
[更新 2: 核オプション]
上記でこれを参照しましたが、万人向けではありませんが、これを VM で実行しているので、Vagrant プロビジョニング スクリプト (シェル スクリプト) で正しい照合を使用して postgres クラスターを再作成するのは実際には非常に簡単です。
sudo service postgresql stop
sudo pg_dropcluster 9.1 --stop main
sudo pg_createcluster --start -e UTF-8 9.1 main
sudo cp -f $CONF_DIR/pg_hba.conf /etc/postgresql/9.1/main/pg_hba.conf
sudo cp -f $CONF_DIR/postgresql.conf /etc/postgresql/9.1/main/postgresql.conf
sudo service postgresql restart
のデフォルトの「すべてを許可する」バージョンがpg_hba.conf
あり、postgresql.conf
それをホスト マシンからコピーして、クラスタの作成時に作成されたデフォルトを上書きします。これは大ハンマーで簡単に解決できる方法ですが、機能し、迅速です。