Экспорт данных из 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. Удаляем последствия неудачного выполнения скрипта. Правим скрипт. Снова запускаем.

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

Выборка случайных строк в mysql

Октябрь 18, 2010 г.

Иногда нужно выбрать строки из базы данных в случайном порядке. При сайтостроительстве эта задача возникает довольно часто - вывести случайную тему из форума, показать в блоке случайный продвигаемый товар, показать случайный ответ посетителя за последнюю ...

Читать

Как узнать версию MySQL?

Сентябрь 3, 2018 г.

Получить версию бд можно как из консоли, так и средствами языка mySQL. Версия из консоли UNIX Тут все просто. Получаем версию из консоли. [crayon-6a15502a718ec054576537/] Версия из SQL консоли Как получить версию mySQL не из unix консоли, а средствами ...

Читать

Как выполнить mysql запрос из командной строки

Январь 19, 2023 г.

Допустим, у вас запущен локально сервер, и есть база myBase с и учетка пользователя UserName/MyPass. Вы хотите выполнить запрос "SELECT * FROM TABLE" из командной строки. Команда передаётся с параметром -e, в общем виде запрос будет выглядеть так: ...

Читать

Курсоры в MySQL

Август 26, 2015 г.

MySQL позволяет использовать курсоры (CURSORs) в хранимых процедурах. Эта конструкция позволяет организовать сложную обработку данных на стороне сервера ...

Читать
 

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

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



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