Совместимость с дампом MySQL не работает - PullRequest
0 голосов
/ 29 ноября 2011

Я что-то не так делаю? Эта команда не будет работать. Я пытаюсь перейти с MySQL на PostgreSQL.

mysql> mysqldump --compatible=postgresql dbname > /tmp/table.sql;

Я получаю сообщение об ошибке.

ОШИБКА 1064 (42000): у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'mysqldump --compatible = postgresql dbname

Что я делаю не так? Есть ли более простой способ конвертировать БД? Я прочитал тонну статей по миграции, но это, кажется, лучший способ начать конверсию.

Ответы [ 3 ]

9 голосов
/ 29 ноября 2011

Дон совершенно прав насчет насущной проблемы. Хотя это еще не все.

MySQL-совместимый режим MySQL не будет генерировать DDL, который вы можете напрямую и просто загрузить в другие базы данных. Не существует универсального и переносимого способа выражения таких вещей, как AUTO_INCREMENT, поэтому дамп должен сохранять такие специфичные для MySQL функции или заменять их типом int без функции автоинкремента. В любом случае вам придется отредактировать дамп, чтобы заменить старое поле AUTO_INCREMENT полем псевдотипа SERIAL.

Существуют различия в именах типов между MySQL и PostgreSQL, которые вам, вероятно, придется исправлять.

В общем, я рекомендую вам сделать два дампа из MySQL. Один должен быть дамп только для схемы, и один должен быть дамп только для данных, оба в «совместимом» формате. Затем вы должны отредактировать дамп схемы, чтобы исправить MySQL-измы и преобразовать их в PostgreSQL-измы или (где это возможно) использование стандарта SQL. После того, как схема исправлена ​​и успешно загружена в PostgreSQL с помощью psql thedatabasename < schema-edited-for-pg.sql, вы можете загрузить дамп данных.

Я бы также порекомендовал обернуть дамп данных в операторы BEGIN; и END;, чтобы он либо прошел успешно, либо завершился неудачно. Это избавит вас от необходимости многократно удалять и пересоздавать базу данных и схему всякий раз, когда вы сталкиваетесь с ошибкой на полпути через дамп и вам нужно отредактировать дамп, чтобы исправить это.

3 голосов
/ 29 ноября 2011

mysqldump - это программа, запускаемая из командной строки os, а не из командной строки mysql. выйдите из mysql и выполните его там, и все должно быть в порядке.

1 голос
/ 29 ноября 2011

Я обычно использую инструмент миграции, например openDbCopy или ESF Data Migration Toolkit для таких целей ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...