2012-08-05 6 views
5

Używam PostgreSQL 9.1. Próba wymuszenia kodowania UTF8 jako domyślnego.Co jest nie tak z postgresql initdb? Dlaczego kodowanie "UTF-8" nie jest wymuszane?

To właśnie robię.

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

Chociaż proces initilization idzie bez problemu,

\l w wierszu psql daje tam szczegóły.

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

Dlaczego kodowanie UTF-8 nie jest wymuszane?

Odpowiedz

11

Wygląda na to, że wywołujesz initdb za pomocą skryptu poziomu działania systemu operacyjnego. Ten skrypt może nie przekazać parametrów. Lepiej spróbuj wykonać initdb bezpośrednio, będziesz musiał wykonać następujące kroki zaczynając jako root i zakładając, że konto użytkownika OS dla bazy danych jest 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

Masz rację. Chociaż nie mogłem uruchomić 'initdb' bezpośrednio jako superuser. dał 'initdb: nie można uruchomić jako root Proszę się zalogować (używając, np." su ") jako (nieuprzywilejowany) użytkownik, który będzie właścicielem błędu procesu serwera. Po zalogowaniu się jako użytkownik nieuprzywilejowany mogłem zainicjować bazę danych przy użyciu odpowiedniego kodowania. – ThinkingMonkey

+0

Zapomniałem o tym, że jest trochę wybredny, zaktualizowałem odpowiedź za pomocą pełnego zestawu poleceń, które mogą być potrzebne. – Eelke

+1

Cześć chłopaki! Czy masz pojęcie, dlaczego otrzymuję: ** initdb: niepoprawna nazwa lokalizacji "'en_US.UTF-8'" **? Próbowałem również bez cudzysłowów, ale potem otrzymuję ** initdb: niepoprawna nazwa locale "en_US.UTF-8" **. Pobrałem pliki binarne Postgresql9.4.1 (nie instalator) dla systemu Windows. Czy ustawienia regionalne en_US.UTF-8 są niedostępne w plikach binarnych systemu Windows? –

1

instalacja Debiana PostgreSQL automatycznie wywołuje InitDB to znaczy inicjalizuje klastra z domyślnego kodowania i lokalizacji. Kodowanie można zmienić później, ale ustawienia regionalne nie. Aby zmienić ustawienia regionalne (AN ewentualnie innych opcji w InitDB), usunąć istniejący domyślny klastra i utwórz nowy:

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 

Ostrzeżenie!

Poprzednia operacja oczywiście usuwa wszystko, co było w bazach danych klastra. Wykonaj tę operację zaraz po zainstalowaniu pakietu podstawowego. Sprawdź podręcznik PostgreSQL, jeśli chcesz zmienić ustawienia regionalne dla istniejącej bazy danych (nie jest to trywialna operacja).