PG :: Error: ERROR: le nouvel encodage (UTF8) est incompatible

J’ai installé postgresql-9.2.4 partir de la source, maintenant dans l’application rails quand j’exécute:

rake db:create commande je reçois:

 $ 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 `' Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"my_db", "host"=>"localhost", "pool"=>5, "username"=>"my_user", "password"=>"my_password"} 

une idée?

Ok, les étapes ci-dessous ont résolu le problème:

  1. Tout d’abord, nous devons supprimer template1. Les modèles ne peuvent pas être supprimés, nous les modifions donc dans un premier temps afin de constituer une firebase database ordinaire:

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

  2. Maintenant, nous pouvons le déposer:

    DROP DATABASE template1;

  3. Il est maintenant temps de créer une firebase database à partir de template0, avec un nouvel encodage par défaut:

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

  4. Modifiez maintenant template1 pour qu’il soit en fait un template:

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

  5. Passez maintenant à template1 et à VACUUM FREEZE le template:

    \c template1

    VACUUM FREEZE;

Le problème devrait être résolu.

Assurez-vous d’avoir la configuration correcte dans votre fichier database.yml . Vous devez utiliser template0 , comme le suggère l’erreur:

 test: adapter: postgresql encoding: unicode database: your_db_name template: template0 host: localhost ... 

Si vous utilisez Debian, lorsque vous installez le paquet postgresql, il utilisera vos parameters régionaux par défaut pour créer la firebase database template1. Si vous n’avez pas configuré votre système d’exploitation pour utiliser UTF-8 comme environnement local par défaut, vous rencontrerez cette erreur.

Outre les solutions ci-dessus, si vous êtes sur une nouvelle installation et que vous ne disposez pas de bases de données actives, vous pouvez supprimer le package postgresql et définir vos parameters régionaux par défaut sur UTF-8. L’avantage de cette méthode est que vous pouvez omettre les informations sur les parameters régionaux lors de la création de bases de données ultérieurement.

dpkg-reconfigure locales

Si vous ne voyez pas les parameters régionaux souhaités, installez le package locales-all

apt-get install locales-all

Ensuite, supprimez postgresql

apt-get remove --purge postgresql-

Puis réinstallez ou améliorez encore une version récente qui n’est pas stable dans Debian .

Si votre installation postgres est nouvelle et que vous n’avez pas encore rempli de firebase database, vous pouvez supprimer votre répertoire de data et ré-exécuter la commande initdb avec l’indicateur pour créer des bases de données avec UTF-8.

Modifiez cette commande pour correspondre à votre installation postgres. L’indicateur -E indique le codage de caractères par défaut. Les autres encodages de caractères sont listés ici .

 /usr/local/pgsql/bin/initdb -E UTF8 -D /usr/local/pgsql/data -U postgres 

Il devrait y avoir une erreur et vous dire que le répertoire de data n’est pas vide. Suivez les instructions et supprimez le répertoire, puis réexécutez la commande. (Ou supprimez le répertoire de data avant de commencer, mais il est toujours intéressant de voir les instructions pour vous-même.)

J’ai eu un problème similaire. Mon database.yml était comme ça: –

 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'] %> 

J’ai ajouté le modèle: template0 aux parameters par défaut

 default: &default adapter: postgresql template: template0 encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 

Et ça a marché

En ce qui me concerne, je change juste la ligne de database.yml :

encoding: unicode

à:

encoding: SQL_ASCII

juste ça et tout fonctionne.