postgresql 8.4.5 encoding

hey, …

postgres=# create database testdb with encoding ‘latin1’;
FEHLER: Kodierung LATIN1 stimmt nicht mit Locale de_DE.UTF-8 überein
DETAIL: Die gewählte LC_CTYPE-Einstellung verlangt die Kodierung UTF8.

laut Dokumentation kann ich fuer jede datenbank die Zeichensatzkodierung separat
festlegen. hab jetzt lange gesucht im web und der doku aber nix gefunden.
jmd nee idee warum das nicht klappt?
bb

Referenz Handbuch Pg 8.4.3 Kapitel 22.2 (Character Set Support)
meine Ausgangslage:
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------±---------±----------±------------±------------±----------------------
postgres | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 |
template0 | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | =c/postgres
: postgres=CTc/postgres
Es soll nun eine DB angelegt werden mit der Kodierung latin1:
createdb -E LATIN1 -T template0 --lc-collate=de_DE.ISO8859-1 --lc-ctype=de_DE.ISO8859-1 n2db
psql -l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
-----------±---------±---------±-----------------±-----------------±----------------------
n2db | postgres | LATIN1 | de_DE.ISO8859-1 | de_DE.ISO8859-1 |
postgres | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 |
template0 | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | =c/postgres
: postgres=CTc/postgres
template1 | postgres | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | =c/postgres
: postgres=CTc/postgres
Entscheidend ist, dass Kodierung (hier:latin1) und ctype kompatibel sind. Leider habe ich keine Idee, welches zu welchem passt.
Ausprobiert passt auch: Kodierung LATIN9 mit lc-collate/lc-ctype de_DE.ISO8859-15

Ergänzung zu meiner Antwort vom 04.02.2011
initdb übernimmt alle aktuell im Betriebssystem aktivierten Spracheinstellungen. Unter UNIXen: locale -a
Werden nachträglich andere Sprachumgebeungen benötigt, muss nach Aktivierung der gewünschten Sprachumgebungen ein initdb erfolgen!
Am Beispiel Ubuntu 11.10/12.04:
Standardmäßig ist nur die deutsche UTF-8-Umgebung installiert.
Somit funktioniert: createdb -T template0 -E utf8 --locale de_DE.utf-8 t4
Es funktioniert nicht:
createdb -T template0 -E iso88591 --locale de_DE.iso88591 a
createdb: Erzeugung der Datenbank ist fehlgeschlagen: FEHLER: ungültiger Locale-Name de_DE.iso88591
Welche deutschen Sprachumgebungen werden unterstützt:
$ grep de_DE /usr/share/i18n/SUPPORTED
de_DE.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15Aktiviere die nicht-UTF-8 Umgebungen:$sudo locale-gen de_DE
Generating locales…
de_DE.ISO-8859-1… done
Generation complete.
$ sudo locale-gen de_DE@euro
Generating locales…
de_DE.ISO-8859-15@euro… done
Generation complete.
Nun muss PostgreSQLneuinitialisiert werden. D.h.erst eine Sicherung aller Datenbanken und globaler Datenz.B.mit pg_dumpall
Nach Löschen des Datenverzeichnisses PGDATA oder dessen verschieben/umbenennen ein neuerliches initdb ausführen und die Datenbanken zurückholen.
$ createdb -T template0 -E iso88591 --locale de_DE.iso88591 b
Liste der Datenbanken

Name | Eigentümer | Kodierung | Sortierfolge | Zeichentyp | Zugriffsprivilegien
-----±-----------±----------±---------------±---------------±----------------------
b | postgres | LATIN1 | de_DE.iso88591 | de_DE.iso88591 |