Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Migration von 7.4 auf 8.3 mit unterschiedlichem Encoding

  1. #1
    ben_ ist offline Neuer Benutzer
    Registriert seit
    11.11.2009
    Beiträge
    6

    Frage Migration von 7.4 auf 8.3 mit unterschiedlichem Encoding

    Hallo zusammen

    Ich habe eine DB auf PostgreSQL 7.4 mit Encoding SQL_ASCII auf Linux am laufen. Jetzt möchte ich diese DB auf PostgreSQL 8.3 auf einen anderen Host migrieren. Das Encoding soll zukünftig UTF8 sein.

    Mit dem Tool pg_dump wird unter der Version 7.4 noch kein Encoding Attribut unterstützt. Nun gut, ich habe pg_dump der 8.3er Version auf dem zweiten Server angewendet und die Daten übers Netz gezogen.

    Folgender Aufruf habe ich für die Erstellung des Dump verwendet:
    Code:
    pg_dump -f dump.tar -Ft -h host.xy.org -U user
    Importiert habe ich den Dump auf einer DB mit Encoding=UTF8 folgendermassen:
    Code:
    pg_restore -d db -U user dump.tar
    Beim Import erhalte ich folgende Fehlermeldungen:
    Code:
    pg_restore: [archiver (db)] Error from TOC entry 1769; 0 934492 TABLE DATA tbl_x
    pg_restore: [archiver (db)] COPY failed: ERROR:  invalid byte sequence for encoding "UTF8": 0x96
    HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
    CONTEXT:  COPY tbl_x, line 670
    pg_restore: [archiver (db)] Error from TOC entry 1746; 0 934352 TABLE DATA tbl_y
    pg_restore: [archiver (db)] COPY failed: ERROR:  invalid byte sequence for encoding "UTF8": 0xfc
    HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
    CONTEXT:  COPY tbl_y, line 187
    pg_restore: [archiver (db)] Error from TOC entry 1731; 0 934314 TABLE DATA tbl_z swisstopo
    pg_restore: [archiver (db)] COPY failed: ERROR:  invalid byte sequence for encoding "UTF8": 0x92
    HINT:  This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding".
    CONTEXT:  COPY tbl_z, line 75
    Kann mir jemand erklären weshalb? client_encoding und server_encoding sind beide auf UTF8 konfiguriert.

    Vielen Dank im Voraus und Gruss
    Ben

  2. #2
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Nun, wieso steht dein client_encoding auf UTF8, wenn du doch nicht weißt, ob deine Daten wirklich UTF8 sind?

    Wenn die Daten wirklich UTF8 sind - sind sie falsch. PostgreSQL lässt nur gültige Daten in die Datenbank, daher werden deine Eingaben abgelehnt mit dem Hinweis, dass es diese Zeichenkombination in UTF8 nicht gibt.
    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

  3. #3
    ben_ ist offline Neuer Benutzer
    Registriert seit
    11.11.2009
    Beiträge
    6

    Standard

    Hallo

    Du meinst dies sind Zeichen welche im UTF8 Zeichensatz nicht unterstützt werden - in SQL_ASCII jedoch schon?

    Oder sollte ich beim Einlesen des Dump das client_encoding auf SQL_ASCII setzen?

  4. #4
    ben_ ist offline Neuer Benutzer
    Registriert seit
    11.11.2009
    Beiträge
    6

    Daumen hoch

    Hallo nochmals

    Ich habs mit folgender Lösung hingekriegt:

    Den Dump erstelle ich als Plaintext und nicht als tar. Danach wandle ich das Encoding des Files von SQL_ASCII (ISO8859-1) nach UTF-8 mit «iconv» um:
    Code:
    iconv -f ISO8859-1 -t UTF-8 dump_ascii.sql > dump_utf.sql
    Danach den Dump einlesen:
    Code:
    cat dump_utf.sql | psql -U user database > success.log
    Gruss
    Ben

  5. #5
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Du übersiehst da etwas: SQL-ASCII untersucht die Daten nicht sondern nimmt die so wie sie sind als gegeben an. Dabei findet auch keine Umwandlung z. B. von Latin1 in UTF8 statt.

    Wenn du deine fehlerhften Daten allerdings als SQL-ASCII in die Datenbank spielst, musst du beim Auslesen das Encoding auch wieder umschalten. Sonst versucht PostgreSQL, die Daten in UTF8 für den Export umzuwandeln - und das schlägt fehl.
    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

  6. #6
    ben_ ist offline Neuer Benutzer
    Registriert seit
    11.11.2009
    Beiträge
    6

    Standard

    Du Hast recht!

    Gibt's denn überhaupt eine Möglichkeit dieses Problem zu lösen? Oder bleibt mir nichts anderes übrig als auf der bestehenden DB die entsprechenden Werte manuell nach UTF-8 zu ändern?

  7. #7
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Du hast meine Eingangsfrage noch nicht beantwortet: sind das Daten, die im UTF8 Format vorliegen sollen? Oder sind das binäre Daten, die keinen Zusammenhang mit einer Textrepräsentation haben?
    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

  8. #8
    ben_ ist offline Neuer Benutzer
    Registriert seit
    11.11.2009
    Beiträge
    6

    Standard

    Nein, die DB enhält keine binären Daten. Als Format der bisherigen Datenbank ist SQL_ASCII konfiguriert.

  9. #9
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Nein, langsam, ich habe meine Frage wohl undeutlich definiert:

    Sind das Texte, die du dort hast?
    Und wenn ja, in welchem Encoding sollten diese theoretisch vorliegen?
    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

  10. #10
    ben_ ist offline Neuer Benutzer
    Registriert seit
    11.11.2009
    Beiträge
    6

    Standard

    Ja, es handelt sich um Texte. Theoretisch sollten diese wohl im LATIN1 Format vorliegen.

    Ich könnte mir jedoch vorstellen, dass es einige Zeichen gibt, welche falsch eingetragen werden (z.B. durch Benutzer welche über ODBC Daten eingetragen haben).

    Wahrscheinlich ist es unvermeidbar die jeweiligen Zeichen manuell zu ersetzen..

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum