Hallo zusammen,
ich versuche gerade auf einem neu hochgezogenen Server ein paar Datenbanken anzulegen, die ich wie bei uns üblich im Encoding UTF8 brauche:
createdb cm_usr -E UTF8
Das hatte bisher auch noch nie Probleme gegeben. Diesmal meckert der Elefant jedoch:
Das vestehe ich insofern nicht, als der Befehl locale an der Kommandozeile folgendes liefert:Code:createdb: database creation failed: ERROR: encoding UTF8 does not match server's locale en_US.ISO-8859-15 DETAIL: The server's LC_CTYPE setting requires encoding LATIN9.
Sollte doch also kein Problem sein?Code:LANG=en_US.utf8 LANGUAGE=en_US.utf8 LC_CTYPE="en_US.utf8" LC_NUMERIC="en_US.utf8" LC_TIME="en_US.utf8" LC_COLLATE="en_US.utf8" LC_MONETARY="en_US.utf8" LC_MESSAGES="en_US.utf8" LC_PAPER="en_US.utf8" LC_NAME="en_US.utf8" LC_ADDRESS="en_US.utf8" LC_TELEPHONE="en_US.utf8" LC_MEASUREMENT="en_US.utf8" LC_IDENTIFICATION="en_US.utf8" LC_ALL=en_US.utf8
Ich befinde mich auf einem Ubuntu-7.10-System, Postgres läuft in Version 8.3.
Kann mir jemand irgendetwas dazu sagen? Bin für jeden Hinweis dankbar!
MfG
der Lösungsschmied
Latin9 ist sowieso sehr ungewöhnlich für einen Server in unseren Breiten.
Was passiert, wenn du dir die Locale als 'postgres' User anzeigen lässt?
Zum Thema "Locale" habe ich hier noch etwas:
locales on Ubuntu - ads' corner
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Wenn ich mir als postgres-Benutzer mit locale die aktuelle Locale anzeigen lasse, bekomme ich das hier:Der Befehl locale -a liefert mir folgende verfügbaren Locales:Code:LANG=en_US.utf8 LANGUAGE=en_US.utf8 LC_CTYPE="en_US.utf8" LC_NUMERIC="en_US.utf8" LC_TIME="en_US.utf8" LC_COLLATE="en_US.utf8" LC_MONETARY="en_US.utf8" LC_MESSAGES="en_US.utf8" LC_PAPER="en_US.utf8" LC_NAME="en_US.utf8" LC_ADDRESS="en_US.utf8" LC_TELEPHONE="en_US.utf8" LC_MEASUREMENT="en_US.utf8" LC_IDENTIFICATION="en_US.utf8" LC_ALL=en_US.utf8
Also weit und breit nichts, aber auch garnichts von LATIN9 zu sehen! Wie kommt Postgres dann da drauf?Code:C en_US.iso885915 en_US.utf8 POSIX
Guten Tag,
ich hatte oder habe dasselbe Problem. Ich bin nun hingegangen und habe alle Datenbanken gelöscht, indem ich das Verzeichnis /usr/local/pgsql/data gelöscht bzw. umbenannt habe. Dann habe ich initdb --locale=de_DE.UTF-8 durchlaufen lassen und damit die Erstkonfiguration neu angelegt. Mit createdb neue_db -E UTF8 konnte ich dieses mal eine Datenbank mit UTF-8 angelegen.
Ist es möglich, dass ALLE Datenbanken mit demselben Zeichensatz angelegt werden müssen? Denn soweit ich das sehe kann ich nun keine Datenbanken mehr in einem anderen Zeichensatz anlegen lassen, sondern immer nur mit UTF-8.
Grüße
Dirk
Hallo Dirk,
meiner Ansicht nach wäre das sehr unflexibel von Postgres, wenn alle DBs das selbe Encoding haben müssten.
Aber der Hinweis von Dir ist trotzdem interessant, ich habe wie von Dir alles gelöscht, neu initialisiert und... leider genau das gleiche.
Aus irgendeinem Grund ist der Server der Ansicht, LATIN9 ist das einzig wahre Encoding
Aber trotzdem besten Dank!
der Loesungsschmied
Hallo!
Ich hab gerade das selbe Problem allerdings mit 'latin1'.
Meine bisherigen Nachforschungen ergaben, das dieses Problem beim Initialisieren des Datenbereichs über die LC_CTYPE-Einstellung gelöst werden kann. Das hieße, pg_dumpall, neu initiallisieren, dump wiedereinspielen. Interessanterweise tritt dieses Problem hier nur bei einem meiner zwei Server auf. Bei ersten (eingerichtet ohne Kenntnis des Problems) tritt es nicht auf, ich kann Datenbanken mit verschiedenen Encodings anlegen, beim anderen tritt es auf, ich kann nur dbs mit UTF-8 anlegen. Wie gesagt soweit die Lösung, die ich bisher gefunden habe. Vielleicht findet sich ja eine Lösung, die mich davor bewahrt, einige GB Geodaten hinundherschubsen zu müssen, deswegen hab ich da noch keine weiteren Infos.
Gruß Uwe
Have a lot of fun!
Grundsätzlich wird das Enkodierungsschema verwendet, das beim Initialisieren angegeben wurde (Angelegte Basis: template1). Es ist aber nicht erforderlich, eine neue Initialisierung durchzuführen. Man kann immer das template0 verwenden, um eine neue Datebank im gleichen Cluster mit anderer Enkodierung anzulegen. Um z.B. zu sehen, was an deutschen Kodierungen verfügbar ist:
$ locale -a|egrep -i '^de.+ch'
de_CH
de_CH.iso88591
de_CH.utf8
deutsch
dann z.B.
$ createdb -E iso88591 -T template0 --lc-collate=de_CH --lc-ctype='de_CH.iso88591' dein_db_name
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen