He instalado postgresql-9.2.4 de la fuente, ahora en rails app cuando ejecuto:

rake db:create comando de recibir:

$ 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?

InformationsquelleAutor tokhi | 2013-05-24

6 Comentarios

  1. 223

    Aceptar, a continuación los pasos resuelve el problema:

    1. Primero, necesitamos soltar template1. Las plantillas no se pueden quitar, así que primero modificarlo de modo que t es una base de datos normal:

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

    2. Ahora podemos caer:

      DROP DATABASE template1;

    3. Ahora su tiempo para crear la base de datos de template0, con una nueva codificación predeterminada:

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

    4. Ahora modificar plantilla1 por lo que es en realidad una plantilla:

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

    5. Ahora cambie a template1 de VACÍO y CONGELACIÓN de la plantilla:

      \c template1

      VACUUM FREEZE;

    Un problema que debe ser resuelto.

    • Esta es la solución de trabajo. No estoy demasiado familiarizado para posgresql, pero mi única pequeño paso 0:sudo -u postgres psql postgres para debian o similar OS.
  2. 38

    Asegúrese de que tiene la configuración correcta en su database.yml archivo. Usted debe utilizar template0, como el error sugiere:

    test:
      adapter: postgresql
      encoding: unicode
      database: your_db_name
      template: template0
      host: localhost
      ...
    • Yo no tenía template0 en mi config, si la pongo yo recibo: PG::Error: ERROR: permission denied to copy database "template0" : CREATE DATABASE "my_database_test" ENCODING = 'unicode' TEMPLATE = "template0"
    • que extraño…no se comportan de la misma para el development env ?
    • Alguien puede explicar la diferencia entre template0 y template1 y por qué funciona esto?
    • consulte postgresql.org/docs/10/static/manage-ag-templatedbs.html – todo tiene sentido después de leer esta página 🙂
  3. 9

    Si usas Debian, al instalar el paquete postgresql va a utilizar su configuración regional predeterminada para crear la base de datos template1. Si usted no ha configurado su sistema operativo a utilizar UTF-8 como una configuración regional predeterminada, usted encontrará este error.

    Además de las anteriores soluciones, si usted está en una instalación nueva y no tienen bases de datos activas, puede quitar el paquete postgresql y el conjunto de su configuración regional predeterminada a UTF-8. La ventaja de este método es que se puede omitir la información de configuración regional a la hora de crear bases de datos en el futuro.

    dpkg-reconfigure locales

    Si usted no ve la localización deseada, instalar los idiomas-todos los paquetes de

    apt-get install locales-all

    A continuación, quitar postgresql

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

    A continuación, vuelva a instalar o mejor aún actualizar a una versión que no está en Debian estable.

    • Puedo establecer mi configuración regional predeterminada en_US.UTF-8 y seguir las instrucciones para volver a instalar postgres, y todavía tengo el mismo error después de.
    • De acuerdo con Simon. Qué pérdida de tiempo 🙁
  4. 4

    Si su postgres instalación es nueva y no ha poblado las bases de datos, sin embargo, entonces usted puede quitar su data directorio y volver a ejecutar el initdb comando con la bandera para crear bases de datos se utiliza UTF-8.

    Modificar este comando para que coincida con su instalación de postgres. El -E indica qué codificación de caracteres debe ser el predeterminado. Otras codificaciones de caracteres que aparecen aquí.

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

    Debe de error y decirle que la data el directorio no está vacío. Siga las instrucciones y eliminar el directorio, a continuación, vuelva a ejecutar el comando. (O, quitar el data directorio antes de empezar, pero siempre es agradable ver las instrucciones para usted.)

  5. 4

    Como para mí, acabo de cambiar la línea de database.yml:

    encoding: unicode

    a:

    encoding: SQL_ASCII

    sólo eso, y funciona todo.

    • Esto es mejor que la aceptación de la solución, pero soy nuevo en estas cosas así que pueden no ser conscientes de los efectos de cambio de unicode a SQL_ASCII.
    • El uso de SQL_ASCII no es un gran defecto.
  6. 2

    Yo tenía un problema similar. Mi base de datos.yml era como este:-

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

    He añadido la plantilla: template0 a la configuración predeterminada

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

    Y funcionó

    • Ah, el orden es importante! template: template0 DEBE antes de venir encoding: unicode parece.

Dejar respuesta

Please enter your comment!
Please enter your name here