2012-08-05 33 views
5

Estoy usando PostgreSQL 9.1. Intentando forzar la codificación UTF8 por defecto.¿Qué está pasando mal con postgresql initdb? ¿Por qué la codificación `UTF-8` no se aplica?

Esto es lo que estoy haciendo.

service postgresql initdb -E 'UTF-8' --lc-collate='en_US.UTF-8' --lc-ctype=locale='en_US.UTF-8'; 

Aunque el proceso initilization continúa sin ningún problema,

un \l en el indicador da psql hay detalles.

      List of databases 
    Name | Owner |Encoding | Collate | Ctype | Access privileges 
-----------+----------+----------+---------+-------+----------------------- 
    postgres | postgres | LATIN1 | en_US | en_US| 

¿Por qué no está recibiendo la codificación forzadas UTF-8?

Respuesta

11

Parece que llama a initdb a través de un script de nivel de ejecución del sistema operativo. Este script puede no pasar los parámetros. Es mejor que intente ejecutar initdb directamente, tendrá que realizar los siguientes pasos comenzando como raíz y asumiendo que la cuenta de usuario del sistema operativo para la base de datos es postgres.

mkdir <your data dir> 
chown postgres <your data dir> 
su postgres 
initdb --pgdata=<your data dir> -E 'UTF-8' --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' 
+1

Tienes razón. Aunque no pude ejecutar 'initdb' directamente como superusuario. dio un 'initdb: no se puede ejecutar como root Inicie sesión (utilizando, por ejemplo," su ") como el usuario (sin privilegios) que tendrá el error del proceso del servidor. Después de iniciar sesión como usuario no privilegiado, pude inicializar el archivo db con la codificación adecuada. – ThinkingMonkey

+0

Olvidé que era un poco quisquilloso, actualicé la respuesta con el conjunto completo de comandos que podrían ser necesarios. – Eelke

+1

¡Hola chicos! ¿Tiene alguna idea de por qué obtengo: ** initdb: nombre de lugar no válido "'en_US.UTF-8'" **? También he intentado sin las comillas, pero luego obtengo ** initdb: nombre de la localidad no válida "en_US.UTF-8" **. He descargado los binarios de Postgresql9.4.1 (no el instalador) para Windows. ¿La configuración regional en_US.UTF-8 no está disponible en los binarios de Windows? –

1

instalación Debian PostgreSQL llama automáticamente al initdb es decir, se inicializa el clúster con codificación predeterminada y la configuración regional. La codificación se puede cambiar más adelante, pero la configuración regional no. Para cambiar la configuración regional (una posiblemente otras opciones en initdb), elimine el clúster predeterminado existente y crear una nueva:

Take root privileges. 
Run the following command: 



pg_dropcluster --stop <version> main 

For example: 

pg_dropcluster --stop 8.3 main 

Run the initdb with your options. For example: 

pg_createcluster --locale de_DE.UTF-8 --start 8.3 main 

Advertencia!

La operación anterior borra obviamente todo lo que tenía en las bases de datos de clúster. Realice esta operación inmediatamente después de haber instalado el paquete base. Consulte el manual de PostgreSQL si necesita cambiar la configuración regional de una base de datos existente (no es una operación trivial).

Cuestiones relacionadas