我一直在为我的公司使用mariadb。mariadb的问题是我不支持物化视图。尽管flexviews支持物化视图,但它存在如下问题。当文件“b\u 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\u mv.sql中
CALL flexviews.add_expr(@mvid, 'COLUMN', 'timestampdiff(YEAR,m.birthday,curdate )', 'age');
在这里 checkout “curdate”,它应该是“curdate()”。它还有许多其他问题我发现非常难以解决。
因此,为了更好地将我们的dbms从mariadb迁移到支持物化视图的postgresql,我采用了两个步骤,第一步是将mariadb示例恢复到mysql dbms上,第二步是使用这个模块将mysql转换为postgresql-
philipsoutham/py-mysql2pgsql公司
但是,在第二步中,当我在guest操作系统ubuntu16\u4上执行以下命令时,出现了这个错误-
UnicodeEncodeError: 'ascii' codec can't encode character u'\ub144' in position 60: ordinal not in range(128).
迁移过程中途中断——仍然有一些表在postgresql端成功创建。实际上,mariadb中的表列描述/注解使用了韩语字符,这可能是导致错误的原因。有人对我的问题有什么建议吗?
1条答案
按热度按时间i7uq4tfw1#
我的问题完全解决了。
也就是说,对于“unicodeencodeerror:'ascii'codec can't encode”问题,我为相关的python源文件嵌入了这3行代码。
当我谈到上述解决方案时,我在github上提到了下面的问题(特别是elkan1788的评论)。
https://github.com/apache/incubator-superset/issues/2771
克服障碍后,我遇到了另一种类型的问题“unicodeencodeerror:'latin-1'编解码器无法编码字符。。。序号不在范围(256)”内。通过如下更改mysql2pgsql目录中postgres_writer.py的一部分,可以解决这个问题。
当我这么做的时候,我提到了卢卡萨对这个问题的评论-
https://github.com/requests/requests/issues/1822
然后,我终于可以通过一个命令(py-mysql2pgsql)将40多个mariadb表迁移到postgresql表。