从mariadb到postgresql的物化视图数据库迁移

bgtovc5b  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(575)

我一直在为我的公司使用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中的表列描述/注解使用了韩语字符,这可能是导致错误的原因。有人对我的问题有什么建议吗?

i7uq4tfw

i7uq4tfw1#

我的问题完全解决了。
也就是说,对于“unicodeencodeerror:'ascii'codec can't encode”问题,我为相关的python源文件嵌入了这3行代码。

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8')

当我谈到上述解决方案时,我在github上提到了下面的问题(特别是elkan1788的评论)。
https://github.com/apache/incubator-superset/issues/2771
克服障碍后,我遇到了另一种类型的问题“unicodeencodeerror:'latin-1'编解码器无法编码字符。。。序号不在范围(256)”内。通过如下更改mysql2pgsql目录中postgres_writer.py的一部分,可以解决这个问题。

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
然后,我终于可以通过一个命令(py-mysql2pgsql)将40多个mariadb表迁移到postgresql表。

相关问题