2012-08-05 8 views
5

Sto usando PostgreSQL 9.1. Cercando di applicare la codifica UTF8 come predefinita.Cosa c'è di sbagliato in initdb postgresql? Perché la codifica `UTF-8` non viene applicata?

Questo è quello che sto facendo.

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

Anche se il processo initilization va avanti senza alcun problema,

un \l al prompt psql dà lì dettagli.

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

Perché la codifica UTF-8 non viene applicata?

risposta

11

Sembra che si chiami initdb attraverso uno script di runlevel del sistema operativo. Questo script potrebbe non trasmettere i parametri. È meglio provare a eseguire initdb direttamente, sarà necessario eseguire le seguenti fasi iniziando come root e assumendo che l'account utente del sistema operativo per il database sia 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

Hai ragione. Sebbene non potessi eseguire 'initdb' direttamente come superutente. ha dato un 'initdb: non può essere eseguito come root Effettuare il login (usando, ad es.," su ") come utente (non privilegiato) che eseguirà il processo del server. Dopo aver effettuato l'accesso come utente non privilegiato, sono riuscito a inizializzare il db con la codifica corretta. – ThinkingMonkey

+0

Hai dimenticato che è un po 'pignolo, ha aggiornato la risposta con il set completo di comandi che potrebbero essere necessari. – Eelke

+1

Ciao ragazzi! Hai idea del motivo per cui ottengo: ** initdb: nome locale non valido "'en_US.UTF-8'" **? Ho anche provato senza le virgolette, ma poi ottengo ** initdb: nome locale non valido "en_US.UTF-8" **. Ho scaricato i binari Postgresql9.4.1 (non l'installer) per Windows. La versione locale en_US.UTF-8 non è disponibile nei file binari di Windows? –

1

installazione Debian PostgreSQL chiama automaticamente l'initdb cioè esso inizializza il cluster con la codifica e localizzazione predefinita. La codifica può essere modificata in seguito, ma il locale non può. Per modificare le impostazioni internazionali (un forse altre opzioni in initdb), eliminare il cluster predefinito esistente e crearne uno nuovo:

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 

Attenzione!

L'operazione precedente elimina ovviamente tutto ciò che era presente nei database del cluster. Esegui questa operazione subito dopo aver installato il pacchetto base. Controllare il manuale di PostgreSQL se è necessario modificare le impostazioni internazionali per un database esistente (non è un'operazione banale).

Problemi correlati