Экспорт данных из PostgreSQL в MySQL

Можно действовать разными способами, в зависимости от ситуации. Мне требовалось вытащить данные из проекта на Python/Django/PostgreSQL, чтобы потом экспортировать их на какую либо платформу PHP/open-source-CMS/MySQL.

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

Мне нужна была структура таблиц и данные. Связи между таблицами, индексы, безопасность — все это можно было отправить в топку.

Этап 1. Делаем дамп. Болванка скрипта.

Здесь мы максимально приводим дамп базы к формату чтения его функцией импорта MySQL.

Для начала авторизируйтесь суперюзером postgres (обычно это одноименный пользователь). И выполните команду следующего вида:

Если вы не знаете имя базы, зайдите в консоль postgres и введите команду «\l». Выйти из консоли можно набрав «\q».

Пояснения по назначению флажков для pg_dump можно запросить в помощи:

Этап 2. Шлифовка.

Полученный дамп (болванка) уже будет довольно хорош в плане его совместимости с mySQL, но все равно потребует доработку «напильником». В качестве этого универсального инструмента я использую Notepad++.

Зачистим, используя регулярные выражения (нажмите CTRL+H),  выберите режим поиска как на скриншоте:

Заменяем, используя следующие шаблоны:

  • ALTER SEQUENCE[^;]+;
  • ALTER TABLE ONLY[^;]+;
  • CREATE.SEQ[^;]+;
  • CREATE INDEX[^;]+;
  • SELECT[^;]+;
  • REVOKE ALL[^;]+;
  • GRANT ALL[^;]+;
  • timestamp with time zone заменяем на timestamp
  • (\\») заменим на \\$1
  • (\\u[0-9a-f]{4}) заменим на \\$1

Последняя замена позволит добавить символ экранирования перед закодированными UTF-8 символами вроде — \u0412\u0435\u0442, которые mySQL будет не верно обрабатывать из-за одиночного бек-слеша.

Останутся несколько моментов, которые надо сделать вручную.

Во-первых, это экранирование столбцов в командах CREATE TABLE. PostgreSQL в отличии от MySQL пользуется двойной кавычкой. В полученном дампе, «квотирование» будет проведено только для названий столбцов таблиц, совпадающих с зарезервированными словами. В этих случаях нужно заменить ″ на `.

В самом начале дампа идут некоторые дефиниции (до первого CREATE TABLE). Их, скорее всего, тоже надо удалить.

Этап 3. Полировка.

Возможно, возникнут ещё какие то мелочи, вы о них узнает только в момент исполнения скрипта под MySQL. Из-за чего «полировка» будет много-итерационной.

Запускаем скрипт. Смотрим, что не нравится MySQL. Удаляем последствия неудачного выполнения скрипта. Правим скрипт. Снова запускаем.

Написать комментарий

Мало букафф? Читайте есчо !

Перенос базы PostgreSQL с сервера на сервер

Январь 24, 2017 г.

Не простая операция,  если вы не имели опыта настройки / работы с postgresql до сих пор. Расскажу поэтапно как выгрузить дамп базы, и как затем этот дамп ...

Читать

Команды консоли PostgreSql

Апрель 18, 2017 г.

Небольшая шпаргалка по работе в консоли postgreSQL. Чтобы полноценно работать с консолью, лучше всего переключиться на супер-юзера базы данных. ...

Читать

 

Комментарии к «Экспорт данных из PostgreSQL в MySQL»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: