ソースからpostgresql-9.2.4
をインストールしました。実行するとRails app:
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、以下の手順で問題を解決しました:
まず、template1をドロップする必要があります。テンプレートはドロップできないため、まず通常のデータベースになるように変更します。
UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
これでドロップできます:
DROP DATABASE template1;
ここで、新しいデフォルトのエンコーディングを使用して、template0からデータベースを作成します。
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
次に、実際にテンプレートになるようにtemplate1を変更します。
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
次にtemplate1に切り替えて、テンプレートをVACUUM FREEZEします:
\c template1
VACUUM FREEZE;
問題を解決する必要があります。
database.yml
ファイルに正しい設定があることを確認してください。エラーが示唆するように、template0
を使用する必要があります。
test:
adapter: postgresql
encoding: unicode
database: your_db_name
template: template0
Host: localhost
...
Debianを使用している場合、postgresqlパッケージをインストールすると、デフォルトのロケールを使用してtemplate1データベースが作成されます。デフォルトロケールとしてUTF-8を使用するようにOSを設定していない場合、このエラーが発生します。
上記のソリューションに加えて、新規インストールでアクティブなデータベースがない場合は、postgresqlパッケージを削除してデフォルトロケールをUTF-8に設定できます。この方法の利点は、将来データベースを作成するときにロケール情報を省略できることです。
dpkg-reconfigure locales
目的のロケールが表示されない場合は、locales-allパッケージをインストールしてください
apt-get install locales-all
その後、postgresqlを削除します
apt-get remove --purge postgresql-<version>
その後、再インストールするか、さらに良い Debian安定版ではない最近のリリースにアップグレードする 。
私に関しては、行をdatabase.yml
:
encoding: unicode
に:
encoding: SQL_ASCII
それだけですべてが機能します。
Postgresのインストールが新しく、まだデータベースを設定していない場合は、data
ディレクトリを削除し、フラグを付けてinitdbコマンドを再実行して、UTF-8を使用してデータベースを作成できます。
Postgresのインストールに合わせてこのコマンドを変更します。 -E
フラグは、どの文字エンコードをデフォルトにするかを指示します。他の文字エンコーディングがリストされています here 。
/usr/local/pgsql/bin/initdb -E UTF8 -D /usr/local/pgsql/data -U postgres
エラーが発生し、data
ディレクトリが空ではないことがわかります。指示に従ってディレクトリを削除し、コマンドを再実行します。 (または、開始する前にdata
ディレクトリを削除しますが、自分自身の指示を見るのは常に素晴らしいことです。)
同様の問題がありました。私のdatabase.ymlはこのようなものでした:
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("Rails_MAX_THREADS") { 5 } %>
development:
<<: *default
database: chatapp_development
test:
<<: *default
database: chatapp_test
production:
<<: *default
database: chatapp_production
username: chatapp
password: <%= ENV['CHATAPP_DATABASE_PASSWORD'] %>
テンプレート:template0をデフォルト設定に追加しました
default: &default
adapter: postgresql
template: template0
encoding: unicode
pool: <%= ENV.fetch("Rails_MAX_THREADS") { 5 } %>
そしてそれは働いた