我正在尝试将包含泰语和英语的MySQL UTF8mb4数据库转换为Postgresql . 这似乎进展顺利,直到我尝试添加tsearch . 让我概述一下所采取的步骤 .
-
我将 生产环境 的副本从转储文件本地还原到MariaDB
-
修复一些枚举值,因为它们丢失而导致Postgresql失效 . MariaDB对他们很满意:(
-
将一些多边形转换为文本格式,因为pgloader不会优雅地处理它们 . -Run pgloader对一个新的postgresql数据库,testdb
pgloader mysql://$MYSQL_USER:$MYSQL_PASSWORD@localhost/$MYSQL_DB postgresql://$PG_USER:$PG_PASSWORD@localhost/testdb
这似乎有效,该网站,一个Laravel,虽然由于MariaDB和Postgresql约束行为之间的差异而有一些错误需要修复 . 然而,当我尝试为tsearch创建文本向量时,我遇到了编码问题 . 这是我需要建议的地方 .
-- 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, ''));
我得到的错误是 ERROR: invalid byte sequence for encoding "UTF8": 0x80
如果我转储该表并恢复到新的Postgresql数据库,我不会得到编码错误 .
问题:
-
用于pgloader的UTF8mb4到Postgresql的正确编码是什么?
-
除了上述之外,有没有办法检查UTF8是否正确?
-
泰语解析器工具中存在问题吗?
任何关于如何解决这个问题的建议将不胜感激 .
干杯,
戈登
PS我是一位经验丰富的开发人员,但不是经验丰富的DBA .
1 回答
您是否尝试逐行手动导入数据集以查看哪些行已成功导入以及哪些行失败?如果某些导入成功但其他导致失败则似乎是数据完整性问题 .
如果成功导入 none 记录,则显然是编码问题 .