1. ホーム
  2. ruby-on-rails

[解決済み] PG::Error: ERROR: 新しいエンコーディング(UTF8)は互換性がありません。

2023-02-20 21:18:51

質問

私は postgresql-9.2.4 をソースからインストールし、現在実行するとrailsアプリに表示されます。

rake db:create コマンドを実行すると

$ bin/rake db:create RAILS_ENV="test"
PG::Error: ERROR:  new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)
HINT:  Use the same encoding as in the template database, or use template0 as template.
: CREATE DATABASE "verticals_test" ENCODING = 'unicode'
/home/vagrant/my-project/.gems/ruby/1.9.1/gems/activerecord-3.2.12/lib/active_record/connection_adapters/postgresql_adapter.rb:652:in `exec
....
bin/rake:16:in `load'
bin/rake:16:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"my_db", "host"=>"localhost", "pool"=>5, "username"=>"my_user", "password"=>"my_password"}

何か思いつきませんか?

どのように解決するのですか?

OK、以下の手順で解決しました。

  1. まず、template1 を削除する必要があります。テンプレートは落とすことができないので、まずは普通のデータベースになるように修正します。

    UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';

  2. これで落とせます。

    DROP DATABASE template1;

  3. さて、いよいよtemplate0から新しいデフォルトエンコーディングでデータベースを作成する時が来ました。

    CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';

  4. ここで、template1 を変更して、実際にテンプレートになるようにします。

    UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

  5. ここで、template1 に切り替え、テンプレートを VACUUM FREEZE します。

    \c template1

    VACUUM FREEZE;

問題は解決されるはずです。