SuperX

KontaktMail für InfosSuchenLogin

Postgres: Wechsel auf der Zeichencodierung auf UTF-8

Unter Postgres bietet es sich an, von Postgres ISO-Codierung zu Postgres-UTF-8 Codierung zu wechseln. Für die Umsetzung der Zeichencodierung von Dateien gibt es in Postgres eingebaute Unterstützung: Wenn ein Text-Dump einer ISO-Datenbank erzeugt wird, dann steht im Kopf der Datei die Encodierung. Wenn man diese Datei mit psql in eine UTF-8-DB füttert, wird automatisch von ISO nach UTF-8 konvertiert. Für die Umcodierung der Datenbank hat sich also folgendes Vorgehen bewährt:

Exportieren Sie die ISO-Datenbank mit pg_dump im Format "plain text". Es wird eine sql-Datei erzeugt, im folgenden Beispiel für die Datenbank mit dem Namen "$DBNAME":

pg_dump -f $DBNAME.sql $DBNAME

Falls Sie direkt beim Dump eine zip-Datei erzeugen wollen, nutzen Sie folgendes Script:

vpg_dump $DBNAME | gzip >$DBNAME.sql.gz 2>dump.err

Wechseln Sie dann in eine Postgres-Installation, die UTF-8 unterstützt, und erzeugen Sie die Datenbank neu:

createdb --encoding=UTF-8 $DBNAME

Dann importieren die Datenbank mit:

psql $DBNAME < $DBNAME.sql

Danach müssen Sie alle Dateien unterhalb von $SUPERX_DIR von ISO nach UTF-8 konvertieren. Bitte fertigen Sie zunächst eine Sicherung des Dateisystems unterhalb von $SUPERX_DIR an.

Zum Konvertieren stehen die Shellscripte des SuperX-Kernmoduls zur Verfügung:

cd $SUPERX_DIR
sx_list_isofiles.x . >iso.txt
sx_recode_isofiles.x iso.txt

Am Ende müssen Sie noch in der Datei $SUPERX_DIR/db/bin/SQL_ENV die Variable LANG auf die UTF-8-Codierung setzen. Führen Sie dazu

locale -a | grep de

aus, um die verfügbaren Codierungen zu ermitteln, und setzen Sie dann den entsprechenden Wert, z.B.:

LANG=de_DE.utf8
export LANG

Übernehmen Sie anschließend die zentral dokumentierten Java-Optionen aus Die Umgebungssteuerung SQL_ENV. Darin muss -Dfile.encoding=UTF-8 enthalten sein.

Danach laden Sie einmal die Datei SQL_ENV neu:

. $SUPERX_DIR/db/bin/SQL_ENV

Danach müssen Sie in der Datei $TOMCAT_HOME/conf/server.xml den Parameter URIEncoding="UTF-8" ergänzen, z.B.

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />

Starten Sie dann noch Tomcat neu. Damit die die Migration nach UTF-8 beendet.