Вопрос или проблема
У меня есть ноутбук с установленным 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, что привело к сбою выполнения программы.
Возможные причины ошибки
-
Необрабатываемые типы данных: Программа может не поддерживать некоторые типы данных, используемые в ваших таблицах MySQL. Это может произойти, если вы используете уникальные типы данных, такие как
ENUM
илиSET
, либо другие специальные форматы, не поддерживаемые PostgreSQL. -
Версия pgloader: Вы используете версию
3.6.7~devel
, которая может содержать ошибки или недоработки. Рассмотрите возможность обновления до более стабильной версии, если такая доступна. -
Проблемы с доступом: Убедитесь, что учетные данные пользователя
john
корректны и имеют необходимые права доступа для считывания данных из базы данных MySQLdbs1106047
. -
Конфиги pgloader: Возможно, конфигурация pgloader не соответствует требованиям вашей базы данных. В частности, проверьте наличие опций, связанных с обработкой метаданных и типами данных.
Рекомендации по решению проблемы
-
Обновление pgloader: Попробуйте обновить pgloader до последней стабильной версии. Это может содержать исправления для работы с данными в MySQL.
-
Тестирование типов данных: Выполните запрос к
information_schema
для получения списка типов данных и проверьте, есть ли среди них те, которые могут вызывать проблемы. Например:SELECT DISTINCT data_type FROM information_schema.columns WHERE table_schema = 'dbs1106047';
-
Альтернативные миграционные инструменты: Если проблема сохраняется, вы можете использовать другие инструменты для миграции данных, например,
MySQL Workbench
, который позволяет экспортировать данные в формате SQL, а затем импортировать их в PostgreSQL. -
Отладка pgloader: Запустите pgloader с включенной отладкой:
pgloader --debug mysql://john:MYPASSWORD@localhost/dbs1106047 postgresql:///test
Это может помочь вам понять, на каком этапе и почему происходит сбой.
-
Создание конфигурационного файла: Создайте конфигурационный файл для 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 или изучить документацию для получения дополнительной информации.