Lo instalé postgresql-9.2.4
desde la fuente, ahora en la aplicación rails cuando ejecuto:
rake db:create
comando que obtengo:
$ 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"}
¿alguna idea?
fuente
sudo -u postgres psql postgres
para debian o un sistema operativo similar.Asegúrese de tener la configuración correcta en su
database.yml
archivo. Debe usartemplate0
, como sugiere el error:test: adapter: postgresql encoding: unicode database: your_db_name template: template0 host: localhost ...
fuente
template0
en mi configuración, si loPG::Error: ERROR: permission denied to copy database "template0" : CREATE DATABASE "my_database_test" ENCODING = 'unicode' TEMPLATE = "template0"
development
env?Si usa Debian, cuando instale el paquete postgresql, usará su configuración regional predeterminada para crear la base de datos template1. Si no ha configurado su sistema operativo para usar UTF-8 como configuración regional predeterminada, encontrará este error.
Además de las soluciones anteriores, si se encuentra en una nueva instalación y no tiene bases de datos activas, puede eliminar el paquete postgresql y establecer su configuración regional predeterminada en UTF-8. La ventaja de este método es que puede omitir la información de la configuración regional cuando cree bases de datos en el futuro.
dpkg-reconfigure locales
Si no ve la configuración regional deseada, instale el paquete locales-all
apt-get install locales-all
Luego elimine postgresql
apt-get remove --purge postgresql-<version>
Luego reinstale o mejor aún actualice a una versión reciente que no esté en Debian estable .
fuente
En cuanto a mí, solo cambio la línea de
database.yml
:encoding: unicode
a:
encoding: SQL_ASCII
solo eso y todo funciona.
fuente
Si su instalación de postgres es nueva y aún no ha llenado ninguna base de datos, puede eliminar su
data
directorio y volver a ejecutar el comando initdb con la bandera para crear bases de datos usando UTF-8.Modifique este comando para que coincida con su instalación de postgres. La
-E
bandera indica qué codificación de caracteres debería ser la predeterminada. Aquí se enumeran otras codificaciones de caracteres ./usr/local/pgsql/bin/initdb -E UTF8 -D /usr/local/pgsql/data -U postgres
Debería producirse un error y decirle que el
data
directorio no está vacío. Siga las instrucciones y elimine el directorio, luego vuelva a ejecutar el comando. (O elimine eldata
directorio antes de comenzar, pero siempre es bueno ver las instrucciones usted mismo).fuente
Tuve un problema similar. Mi database.yml era así: -
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'] %>
Agregué template: template0 a la configuración predeterminada
default: &default adapter: postgresql template: template0 encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
Y funcionó
fuente
template: template0
DEBE venir antes deencoding: unicode
que parezca.