PG::Erreur: ERREUR: les nouvelles de l'encodage (UTF-8) est incompatible
J'ai installé postgresql-9.2.4
à partir de la source, aujourd'hui en application rails quand j'execute:
rake db:create
commande 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?
Vous devez vous connecter pour publier un commentaire.
Ok, étapes ci-dessous résolu le problème:
Tout d'abord, nous avons besoin de déposer template1. Les modèles ne peuvent pas être abandonné, nous avons donc d'abord de le modifier afin de t est une base de données ordinaire:
UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
Maintenant, nous pouvons déposer:
DROP DATABASE template1;
Il est maintenant temps de créer une base de données à partir de template0, avec un nouveau codage par défaut:
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
Maintenant modifier template1 c'est donc en fait un modèle:
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
Maintenant passer à template1 et VIDE GELER le modèle:
\c template1
VACUUM FREEZE;
Problème devrait être résolu.
sudo -u postgres psql postgres
pour debian ou similaire OS.Assurez-vous que vous avez la bonne configuration de votre
database.yml
fichier. Vous devez utilisertemplate0
, comme l'erreur suggère:template0
dans ma config, si je place ce que je reçois:PG::Error: ERROR: permission denied to copy database "template0" : CREATE DATABASE "my_database_test" ENCODING = 'unicode' TEMPLATE = "template0"
development
env ?Si vous utilisez Debian, lorsque vous installez le paquetage postgresql utilise vos paramètres régionaux par défaut pour créer la base de données template1. Si vous n'avez pas configuré votre système d'exploitation à utiliser l'UTF-8 comme un des paramètres régionaux par défaut, vous rencontrez cette erreur.
Outre les solutions ci-dessus, si vous êtes sur une nouvelle installation et n'ont pas de bases de données actives, vous pouvez supprimer le paquet postgresql et définir vos paramètres régionaux par défaut est 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 dans le futur.
dpkg-reconfigure locales
Si vous ne voyez pas la langue désirée, installez le paquet locales-all
apt-get install locales-all
Puis retirez postgresql
apt-get remove --purge postgresql-<version>
Puis réinstaller ou mieux encore la mise à niveau vers une version récente qui n'est pas dans Debian stable.
Si votre installation de postgres est nouveau et que vous n'avez pas renseigné toutes les bases de données encore, alors vous pouvez supprimer votre
data
répertoire et exécutez de nouveau la commande initdb avec le drapeau de créer des bases de l'utilisation de l'UTF-8.Modifier cette commande pour correspondre à votre installation de postgres. Le
-E
drapeau indique le codage de caractères doit être la valeur par défaut. D'autres codages de caractères sont répertoriés ici.Il devrait erreur et vous dire que le
data
répertoire n'est pas vide. Suivez les instructions et supprimer le répertoire, puis exécutez de nouveau la commande. (Ou bien supprimer ladata
répertoire avant de commencer, mais il est toujours agréable de voir les instructions pour vous-même.)Comme pour moi, je viens de changer la ligne de
database.yml
:encoding: unicode
à:
encoding: SQL_ASCII
et tout cela fonctionne.
J'ai eu un problème similaire. Ma base de données.yml était comme ça:-
J'ai ajouté modèle: template0 les paramètres par défaut de
Et il a travaillé
template: template0
DOIT venir avantencoding: unicode
il me semble.