pgloader не удаётся при попытке миграции из mysql

Вопрос или проблема

У меня есть ноутбук с установленным Ubuntu

john@John-Ubuntu:~$ uname -a
Linux John-Ubuntu 6.8.0-49-generic #49-Ubuntu SMP PREEMPT_DYNAMIC Пн Ноя  4 02:06:24 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

У меня установлен pgloader

john@John-Ubuntu:~$ pgloader -V
pgloader версия "3.6.7~devel"
скомпилировано с SBCL 2.2.9.debian
john@John-Ubuntu:~$

Я выполняю следующую команду pgloader

pgloader --verbose --debug mysql://john:MYPASSWORD@localhost/dbs1106047  postgresql:///test

вывод:

pgloader версия 4.6.7~devel
скомпилировано с SBCL 2.2.9.debian
sb-impl::*default-external-format* :UTF-8
tmpdir: #P"/tmp/pgloader/"
2024-11-25T12:06:27.029000Z УВЕДОМЛЕНИЕ Запуск pgloader, система логирования готова.
2024-11-25T12:06:27.045999Z ИНФО Запуск монитора
2024-11-25T12:06:27.053999Z ЛОГ pgloader версия "3.6.7~devel"
2024-11-25T12:06:27.054999Z ИНФО     ИСТОЧНИК: "mysql://john:MYPASSWORD@localhost/dbs1106047"
2024-11-25T12:06:27.055999Z ИНФО URI ИСТОЧНИКА: #<PGLOADER.SOURCE.MYSQL:MYSQL-CONNECTION mysql://john@localhost:3306/dbs1106047 {1005DCBCF3}>
2024-11-25T12:06:27.055999Z ИНФО     ЦЕЛЬ: "postgresql:///test"
2024-11-25T12:06:27.055999Z ИНФО URI ЦЕЛИ: #<PGLOADER.PGSQL:PGSQL-CONNECTION pgsql://john@UNIX:5432/test {1005F97933}>
2024-11-25T12:06:27.055999Z ОТЛАДКА ЗАГРУЗКА ДАННЫХ ИЗ #<PGLOADER.SOURCE.MYSQL:MYSQL-CONNECTION mysql://john@localhost:3306/dbs1106047 {1005DCBCF3}>
2024-11-25T12:06:27.121999Z ОТЛАДКА ПОДКЛЮЧЕНО К #<PGLOADER.PGSQL:PGSQL-CONNECTION pgsql://john@UNIX:5432/test {1005F97933}>
2024-11-25T12:06:27.121999Z ОТЛАДКА УСТАНОВКА client_encoding В 'utf8'
2024-11-25T12:06:27.121999Z ОТЛАДКА УСТАНОВКА application_name В 'pgloader'
2024-11-25T12:06:27.166998Z ЛОГ Миграция из #<MYSQL-CONNECTION mysql://john@localhost:3306/dbs1106047 {1005DCBCF3}>
2024-11-25T12:06:27.166998Z ЛОГ Миграция в #<PGSQL-CONNECTION pgsql://john@UNIX:5432/test {1005F97933}>
2024-11-25T12:06:27.253998Z ОТЛАДКА ПОДКЛЮЧЕНО К #<MYSQL-CONNECTION mysql://john@localhost:3306/dbs1106047 {1005DCBCF3}>
2024-11-25T12:06:27.264998Z SQL MySQL: отправка запроса: -- параметры: имя базы данных
--         имя типа таблицы
--         только таблицы
--         только таблицы
--         включая
--         список-параметров-к-условию-включая
--         исключая
--         список-параметров-к-условию-исключая
  select c.table_name, t.table_comment,
         c.column_name, c.column_comment,
         c.data_type, c.column_type, c.column_default,
         c.is_nullable, c.extra
    from information_schema.columns c
         join information_schema.tables t using(table_schema, table_name)
   where c.table_schema="dbs1106047" and t.table_type="BASE TABLE"

order by table_name, ordinal_position;
2024-11-25T12:06:27.309997Z ОШИБКА mysql: 76 выпало из выражения ECASE.
       Хотел одно из (2 3 4 5 6 8 9 10 11 14 15 17 20 21 23 27 28 30 31 32 33
                      35 41 42 45 46 47 48 49 50 51 52 54 55 56 60 61 62 63 64
                      65 69 72 77 78 79 82 83 87 90 92 93 94 95 96 97 98 101
                      102 103 104 105 106 107 108 109 110 111 112 113 114 115
                      116 117 118 119 120 121 122 123 124 128 129 130 131 132
                      133 134 135 136 137 138 139 140 141 142 143 144 145 146
                      147 148 149 150 151 159 160 161 162 163 164 165 166 167
                      168 169 170 171 172 173 174 175 176 177 178 179 180 181
                      182 183 192 193 194 195 196 197 198 199 200 201 202 203
                      204 205 206 207 208 209 210 211 212 213 214 215 223 224
                      225 226 227 228 229 230 231 232 233 234 235 236 237 238
                      239 240 241 242 243 244 245 246 247 254).
2024-11-25T12:06:27.309997Z ЛОГ сводка отчета сброшена
       имя таблицы     ошибки       прочитано   импортировано      байты      общее время       прочитано      записано
-----------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
  fetch meta data          0          0          0                     0.000s
-----------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
-----------------  ---------  ---------  ---------  ---------  --------------  ---------  ---------
2024-11-25T12:06:27.363997Z ИНФО Остановка монитора

Я искал в интернете, но не смог найти способ решить проблему, любая помощь будет очень полезна.

Ответ или решение

Проблема с pgloader при миграции из MySQL на PostgreSQL

Введение

Вы столкнулись с проблемой при миграции данных из MySQL в PostgreSQL с использованием pgloader на вашей системе Ubuntu. Программа выдает ошибку при выполнении запроса к метаданным MySQL. В данной статье мы разберем возможные причины этой проблемы и предложим пути ее решения.

Описание проблемы

При выполнении команды:

pgloader --verbose --debug mysql://john:MYPASSWORD@localhost/dbs1106047 postgresql:///test

Вы получаете следующий лог:

...
2024-11-25T12:06:27.309997Z ERROR mysql: 76 fell through ECASE expression.
...

Это сообщение указывает на то, что pgloader не смог обработать один из типов данных в MySQL, что привело к сбою выполнения программы.

Возможные причины ошибки

  1. Необрабатываемые типы данных: Программа может не поддерживать некоторые типы данных, используемые в ваших таблицах MySQL. Это может произойти, если вы используете уникальные типы данных, такие как ENUM или SET, либо другие специальные форматы, не поддерживаемые PostgreSQL.

  2. Версия pgloader: Вы используете версию 3.6.7~devel, которая может содержать ошибки или недоработки. Рассмотрите возможность обновления до более стабильной версии, если такая доступна.

  3. Проблемы с доступом: Убедитесь, что учетные данные пользователя john корректны и имеют необходимые права доступа для считывания данных из базы данных MySQL dbs1106047.

  4. Конфиги pgloader: Возможно, конфигурация pgloader не соответствует требованиям вашей базы данных. В частности, проверьте наличие опций, связанных с обработкой метаданных и типами данных.

Рекомендации по решению проблемы

  1. Обновление pgloader: Попробуйте обновить pgloader до последней стабильной версии. Это может содержать исправления для работы с данными в MySQL.

  2. Тестирование типов данных: Выполните запрос к information_schema для получения списка типов данных и проверьте, есть ли среди них те, которые могут вызывать проблемы. Например:

    SELECT DISTINCT data_type FROM information_schema.columns WHERE table_schema = 'dbs1106047';
  3. Альтернативные миграционные инструменты: Если проблема сохраняется, вы можете использовать другие инструменты для миграции данных, например, MySQL Workbench, который позволяет экспортировать данные в формате SQL, а затем импортировать их в PostgreSQL.

  4. Отладка pgloader: Запустите pgloader с включенной отладкой:

    pgloader --debug mysql://john:MYPASSWORD@localhost/dbs1106047 postgresql:///test

    Это может помочь вам понять, на каком этапе и почему происходит сбой.

  5. Создание конфигурационного файла: Создайте конфигурационный файл для pgloader, указав явно преобразования типов данных. Например:

    LOAD DATABASE
        FROM mysql://john:MYPASSWORD@localhost/dbs1106047
        INTO postgresql://john@localhost/test
    
    WITH data only, create tables, include no drop
    
    ALTER SCHEMA 'dbs1106047' RENAME TO 'public';

Заключение

Ошибка, которую вы получаете при миграции данных из MySQL в PostgreSQL с помощью pgloader, связана с проблемами обработки типов данных. Мы рассмотрели несколько путей решения, которые могут помочь вам избавиться от данной проблемы, включая обновление программного обеспечения, исследование типов данных и использование альтернативных инструментов. Если указанные методы не помогают, советуем обратиться к сообществу pgloader или изучить документацию для получения дополнительной информации.

Оцените материал
Добавить комментарий

Капча загружается...