我一直在为我的公司使用MariaDB。MariaDB的问题是我不支持物化视图。虽然Flexview支持物化视图,但它存在以下问题。文件'b_table.sql‘具有
Create table matered_view AS
Select timestampdiff(YEAR,`m`.`birthday`,curdate()) AS `age`
From `transDB`.`members` `m` ...Flexview的实用程序(convert.php)可以如下所示。
$ php convert.php transDB < b_table.sql > mem_mv.sql然而,在mem_mv.sql中,您可以找到
CALL flexviews.add_expr(@mvid, 'COLUMN', 'timestampdiff(YEAR,m.birthday,curdate )', 'age');在这里签出'curdate',应该是"curdate()“。它还有很多其他的问题,我觉得很难解决。
因此,为了将数据库管理系统从MariaDB迁移到支持物化视图的PostgreSQL,我正在执行两个步骤,步骤1是将MariaDB实例恢复到MySQL DBMS,第2步是使用该模块将MySQL转换为PostgreSQL -
但是,在第二步,当我在我的来宾操作系统Ubuntu 16_4上执行以下命令时,我遇到了这个错误-
UnicodeEncodeError: 'ascii' codec can't encode character u'\ub144' in position 60: ordinal not in range(128).迁移过程在中间中断--仍然有几个表是在PostgreSQL端成功创建的。实际上,韩国字符用于MariaDB中的表列描述/注释,这可能是导致错误的原因。有人对我的问题有什么建议吗?
发布于 2018-02-01 13:51:20
我的问题完全解决了。
也就是说,对于"UnicodeEncodeError:'ascii‘编解码器无法编码“问题,我为相关的python源文件嵌入了这3行代码。
import sys
reload(sys)
sys.setdefaultencoding('utf-8')当我触及上述解决方案时,我提到了下面关于github的问题(特别是elkan1788 1788的评论)。
https://github.com/apache/incubator-superset/issues/2771
在障碍被克服后,我遇到了另一种类型的"UnicodeEncodeError:‘拉丁语-1’编解码器不能编码字符.序数不在范围(256)“。通过在postgres_writer.py目录中更改mysql2pgsql目录中的一部分来解决这个问题,如下所示。
comments.append('COMMENT ON TABLE %s is %s;' % (table.name,
QuotedString(table.comment).getquoted()))
==>
comments.append('COMMENT ON TABLE %s is %s;' % (table.name,
QuotedString(table.comment.encode('utf-8')).getquoted()))当我这样做时,我参考了卢卡萨对这个问题的评论-
https://github.com/requests/requests/issues/1822
然后,我可以通过一个command(py-mysql2pgsql).将40多个MariaDB表迁移到PostgreSQL表。
https://stackoverflow.com/questions/48180705
复制相似问题