Перенос базы данных из MariaDB в PostgreSQL для материализованного представления

0

Я использую MariaDB для своей компании. Проблема MariaDB заключается в том, что я не поддерживаю материализованные представления. Хотя Flexviews поддерживает материализованные представления, у него есть проблема следующим образом. Когда файл " b_table.sql " имеет определение вида

Create table matered_view AS
Select timestampdiff(YEAR,'m'.'birthday',curdate()) AS 'age'
From 'transDB'.'members' 'm' ...

Утилиту (convert.php) Flexviews можно использовать следующим образом.

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

Здесь checkout ' curdate ', это должно было быть " curdate() ". У него также есть много других проблем, которые мне очень трудно решить.

Итак, чтобы перенести нашу СУБД из MariaDB в PostgreSQL, которая лучше поддерживает материализованный просмотр, я следую двухэтапной процедуре, где шаг 1 - восстановить экземпляр MariaDB в СУБД MySQL, а шаг 2 - использовать этот модуль для преобразования MySQL в PostgreSQL -

philipsoutham/р-mysql2pgsql

Но на втором этапе, когда я выполняю следующую команду на моей гостевой ОС Ubuntu 16_4, у меня была эта ошибка -

UnicodeEncodeError: 'ascii' codec can't encode character u'\ub144' in position 60: ordinal not in range(128).

И процесс миграции прервался посередине - все еще несколько таблиц, созданных на стороне PostgreSQL успешно. На самом деле, корейские символы используются для описания/комментариев столбца таблицы в MariaDB, вероятно, это вызвало ошибку. Кто-нибудь имеет предложение по моей проблеме?

  • 1
    Ответ не так прост, потому что это зависит от большего количества факторов. Мы используем обе базы данных - каждая по уважительной причине. MySQL / MariaDB для нашего веб-виджета с очень высоким коэффициентом чтения и PostgreSQL для тяжелых аналитических запросов по ТБ данных с расширенными оконными функциями. Таким образом, вы должны рассмотреть всю картину.
  • 0
    Иногда лучше написать SQL самостоятельно, чем зависеть от стороннего пакета.
Теги:
database-migration
unicode
materialized-views

1 ответ

0

Мой вопрос улегся полностью.

То есть, для кодека UnicodeEncodeError: 'ascii' не может кодировать "проблему", я вложил эти 3 строки кода в соответствующий исходный файл python.

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

В то время как я достиг выше решения, я упоминал ниже вопрос о github (в частности, комментарий elkan1788).

https://github.com/apache/incubator-superset/issues/2771

После преодоления препятствия я столкнулся с другим типом проблемы: " UnicodeEncodeError:" latin-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

Затем мне удалось перенести 40 таблиц MariaDB, наконец, в таблицы PostgreSQL по одной команде (py-mysql2pgsql).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню