gpt4 book ai didi

mysql - 使用 Pgloader 从 MariaDB 转换后使用 tsearch 处理泰语文本的 Postgresql 编码问题

转载 作者:行者123 更新时间:2023-11-29 18:39:41 24 4
gpt4 key购买 nike

我正在尝试将包含泰语和英语的 MySQL UTF8mb4 数据库转换为 Postgresql。这似乎去好吧,直到我尝试添加 tsearch。让我概述一下所采取的步骤。

  • 安装此泰语解析器 https://github.com/zdk/pg-search-thai
  • 我将生产副本从转储文件本地恢复到 MariaDB
  • 修复了一些导致 Postgresql 错误的枚举值,因为它们是丢失的。 MariaDB 对他们很满意:(
  • 将一些多边形转换为文本格式作为 pgloader 不能很好地处理它们。- 针对新的 postgresql 数据库 testdb 运行 pgloader

    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, ''));

我得到的错误是错误:编码“UTF8”的字节序列无效:0x80

如果我转储该表并将其恢复到新的 Postgresql 数据库中,我不会收到编码错误。

问题:

  • pgloader 的 UTF8mb4 到 Postgresql 的正确编码是什么?
  • 除了上述方法之外,还有其他方法可以检查数据是否正确(UTF8)吗?
  • 问题出在泰语解析器工具上吗?

任何有关如何解决此问题的建议将不胜感激。

干杯,

戈登

PS 我是一位经验丰富的开发人员,但不是一位经验丰富的 DBA。

最佳答案

您是否尝试过手动逐行导入数据集以查看哪些行导入成功、哪些行导入失败?如果某些导入成功,但其他导入失败,则似乎存在数据完整性问题。

如果没有记录成功导入,则显然是编码问题。

关于mysql - 使用 Pgloader 从 MariaDB 转换后使用 tsearch 处理泰语文本的 Postgresql 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45030470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com