2017-07-11 3 views
0

Ich versuche, eine MySQL UTF8mb4 Datenbank, die Thai und Englisch zu Postgresql enthält zu konvertieren. Dies scheint zu gehen gut, bis ich versuche und tsearch hinzufügen. Lassen Sie mich die durchgeführten Schritte skizzieren.Postgresql Kodierung Problem mit tsearch mit Thai Text nach der Konvertierung von MariaDB mit Pgloader

  • Installieren Sie dieses Thai-Parser https://github.com/zdk/pg-search-thai
  • ich eine Kopie der Produktion vor Ort aus einer Dump-Datei in MariaDB
  • Fix einige ENUM-Werte wiederherstellen, die Postgresql stolpern wegen ihnen fehlt sein. MariaDB ist glücklich mit ihnen :(
  • Konvertieren einige Polygone Textformat als pgloader nicht mit ihnen anmutig befasst. -Run pgloader gegen eine frische postgresql Datenbank, testdb

    pgloader mysql://$MYSQL_USER:[email protected]/$MYSQL_DB postgresql://$PG_USER:[email protected]/testdb

Dies scheint zu funktionieren, die Site, eine Laravel, scheint zu funktionieren, obwohl einige Bugs aufgrund der Unterschiede zwischen MariaDB und Postgresql Constraint-Verhalten behoben werden müssen.Wenn ich versuche, Textvektoren für tsearch zu erstellen, stoße ich auf Codierungsprobleme. Hier brauche ich einen Rat.

-- trying to create minimal case, dumping Thai names into a temporary table 
CREATE EXTENSION thai_parser; 
CREATE TEXT SEARCH CONFIGURATION thai_unstemmed (PARSER = thai_parser); 
ALTER TEXT SEARCH CONFIGURATION thai_unstemmed ADD MAPPING FOR a WITH simple; 

-- to test the parser is working, which it is 
SELECT to_tsvector('thai_unstemmed', 'ข้าวเหนียวส้มตำไก่ย่าง ต้มยำกุ้ง in thailand'); 

-- to recreate my error I did this 
CREATE TABLE vendor_names AS SELECT id,name from vendors_i18n; 
ALTER TABLE vendor_names ADD COLUMN tsv_name_th tsvector; 

-- this fails 
UPDATE vendor_names SET tsv_name_th=to_tsvector('thai_unstemmed', coalesce(name, '')); 

Der Fehler, den ich bekommen ist ERROR: invalid byte sequence for encoding "UTF8": 0x80

Wenn ich diese Tabelle und Wiederherstellen in eine neue PostgreSQL-Datenbank-Dump Ich habe nicht die Codierung Fehler.

Fragen:

  • Was die korrekte Kodierung ist für UTF8mb4 zu verwenden für pgloader PostGreSQL?
  • Gibt es eine andere Möglichkeit als die oben genannten, um zu überprüfen, ob die Daten UTF8 korrekt sind oder nicht?
  • Ist das Problem im Thai-Parser-Tool?

Irgendwelche Vorschläge, wie man das löst, würde geschätzt werden.

Cheers,

Gordon

PS Ich bin ein erfahrener Entwickler aber kein erfahrener DBA.

+0

Können Sie den Kontext des Hex '80' finden. Vielleicht ist es Teil einer größeren Saite? –

Antwort

0

Haben Sie versucht, den Datensatz zeilenweise manuell zu importieren, um zu sehen, welche Zeilen erfolgreich importiert wurden und welche fehlgeschlagen sind? Wenn einige Importe erfolgreich sind, aber andere fehlschlagen, scheint dies ein Datenintegritätsproblem zu sein.

Wenn keine der Datensätze erfolgreich importiert werden, ist es offensichtlich ein Codierungsproblem.

Verwandte Themen