Дон совершенно прав насчет насущной проблемы. Хотя это еще не все.
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;
, чтобы он либо прошел успешно, либо завершился неудачно. Это избавит вас от необходимости многократно удалять и пересоздавать базу данных и схему всякий раз, когда вы сталкиваетесь с ошибкой на полпути через дамп и вам нужно отредактировать дамп, чтобы исправить это.