Lo instalé postgresql-9.2.4desde 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 postgrespara debian o un sistema operativo similar.Asegúrese de tener la configuración correcta en su
database.ymlarchivo. Debe usartemplate0, como sugiere el error:test: adapter: postgresql encoding: unicode database: your_db_name template: template0 host: localhost ...fuente
template0en mi configuración, si loPG::Error: ERROR: permission denied to copy database "template0" : CREATE DATABASE "my_database_test" ENCODING = 'unicode' TEMPLATE = "template0"developmentenv?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 localesSi no ve la configuración regional deseada, instale el paquete locales-all
apt-get install locales-allLuego 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: unicodea:
encoding: SQL_ASCIIsolo 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
datadirectorio 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
-Ebandera 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 postgresDebería producirse un error y decirle que el
datadirectorio no está vacío. Siga las instrucciones y elimine el directorio, luego vuelva a ejecutar el comando. (O elimine eldatadirectorio 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: template0DEBE venir antes deencoding: unicodeque parezca.