100 votes

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

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

rake db:create commande que j'obtiens :

$ 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"}

Une idée ?

260voto

tokhi Points 1911

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

  1. Tout d'abord, nous devons déposer le modèle 1. Les modèles ne peuvent pas être supprimés, donc nous devons d'abord le modifier pour qu'il devienne une base de données ordinaire :

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

  2. Maintenant on peut laisser tomber :

    DROP DATABASE template1;

  3. Il est maintenant temps de créer une base de données à partir du modèle 0, avec un nouvel encodage par défaut :

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

  4. Maintenant, modifiez template1 pour qu'il s'agisse d'un modèle :

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

  5. Passez maintenant au modèle 1 et mettez le modèle sous vide :

    \c template1

    VACUUM FREEZE;

Le problème devrait être résolu.

49voto

mihai Points 7035

Assurez-vous que vous avez la bonne configuration dans votre database.yml fichier. Vous devez utiliser template0 comme le suggère l'erreur :

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

14voto

lee Points 131

Si vous utilisez Debian, lorsque vous installez le paquet postgresql, il utilisera votre locale par défaut pour créer la base de données template1. Si vous n'avez pas configuré votre système d'exploitation pour utiliser UTF-8 comme paramètres linguistiques par défaut, vous rencontrerez cette erreur.

En plus des solutions ci-dessus, si vous êtes sur une nouvelle installation et que vous n'avez pas de bases de données actives, vous pouvez supprimer le paquet postgresql et définir votre locale par défaut sur UTF-8. L'avantage de cette méthode est que vous pouvez omettre les informations de paramètres régionaux lors de la création de bases de données à l'avenir.

dpkg-reconfigure locales

Si vous ne voyez pas la locale désirée, installez le paquet locales-all

apt-get install locales-all

Puis supprimez postgresql

apt-get remove --purge postgresql-<version>

Puis réinstallez ou mieux encore mise à niveau vers une version récente qui n'est pas dans la version stable de Debian .

7voto

littleforest Points 1149

Si votre installation postgres est récente et que vous n'avez pas encore peuplé de bases de données, vous pouvez supprimer le fichier data et réexécutez la commande initdb avec l'option permettant de créer des bases de données en utilisant UTF-8.

Modifiez cette commande pour qu'elle corresponde à votre installation postgres. Le site -E indique quel encodage de caractères doit être utilisé par défaut. Les autres encodages de caractères sont listés aquí .

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

Un message d'erreur devrait s'afficher et vous indiquer que le data n'est pas vide. Suivez les instructions et supprimez le répertoire, puis exécutez à nouveau la commande. (Ou bien, supprimez le data avant de commencer, mais c'est toujours agréable de voir les instructions par soi-même).

3voto

abigoroth Points 227

Pour ma part, je change juste la ligne de database.yml :

encoding: unicode

a:

encoding: SQL_ASCII

juste ça et ça marche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X