Unicode Datenbanken mit PG 7.4

From: "W(dot) Haslbeck" <spam(dot)langweilt(at)gmx(dot)de>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Unicode Datenbanken mit PG 7.4
Date: 2005-01-18 19:12:02
Message-ID: 200501182012.02168.spam.langweilt@gmx.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Hallo,

Ich hab hier ein Problem mit PostgreSQL 7.4.[5|6]:

In einer existierenen Datenbank mit Codierung 'LATIN9' sollen ein paar neue
Tabellen angelegt werden, die Unicode Zeichen enthalten (z.B. Russische
Begriffe). Da die Codierung nur Datenbankweit festgelegt werden kann,
hab ich einen kompletten Dump gemacht, ihn etwas behandelt (ISO-8859-15 nach
UTF-8 mit iconv konvertiert, sowie alle vorkommen von 'LATIN9' in 'UNICODE'
abgeändert), mit dropdb die alte DB gelöscht und schliesslich den Dump
importiert. Soweit klappt alles ganz gut.

Auf die DB greift u.a. eine legacy-Applikation zu, die mit UTF-8 nichts
anfangen kann. Deshalb habe ich in der postgresql.conf den Parameter
'client_encoding' auf latin9 gesetzt, damit ist die Standard-Client-Kodierung
ISO-8859-15 und die Applikation ist glücklich. Die Unicode-taugliche
Anwendung, die auf die Unicode-enthaltenden-Tabellen zugreift, schickt am
Anfang der Session ein 'SET CLIENT_ENCODING TO UTF8;' und alles ist gut.

Ok, jetzt das Probem:
Da client_encoding standardmässig nun ja auf LATIN9 steht, die Tabellen aber
teilweise Unicode-Zeichen enthalten, fällt ein pg_dump (bzw. pg_dumpall) auf
die Schnauze, wenn es auf Einträge trifft, die sich nicht in ISO-8859-15
abbilden lassen. Das sieht dann in etwa so aus:

$ su postgres -c "pg_dumpall >dump"
pg_dump: WARNING: ignoring unconvertible UTF-8 character 0xc4a2
pg_dump: WARNING: ignoring unconvertible UTF-8 character 0xc584
pg_dump: WARNING: ignoring unconvertible UTF-8 character 0xd184
pg_dump: WARNING: ignoring unconvertible UTF-8 character 0xd186
pg_dump: WARNING: ignoring unconvertible UTF-8 character 0xd0b9
pg_dump: WARNING: ignoring unconvertible UTF-8 character 0xd0bb
$

Das ist natürlich fatal, ein Backup in Form eines DB-Dumps ist Pflicht.

Ich bin jetzt in der Zwickmühle:
Stell ich den Parameter 'client_encoding' in der postgresql.conf auf utf8,
dann klappt der Dump, aber die Nicht-Unicode-tauglichen Anwendungen fallen
auf die Schnauze. Stell ich ihn auf latin9, dann laufen zwar die Anwendungen,
aber das Backup versagt.

Lange rede, kurzer Sinn: gibt es eine Möglichkeit, pg_dump bzw. pg_dumpall
mitzuteilen, mit welchem client_encoding sie die Daten entladen sollen?
(Oder muss ich schon mal meinen Compiler warmlaufen lassen und den Source
patchen?)

Walter

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Ralf Schuchardt 2005-01-18 19:49:18 Re: Unicode Datenbanken mit PG 7.4
Previous Message Peter Eisentraut 2004-12-18 09:08:25 Re: PostgreSQL windows installation