Экспорт данных из 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 из консоли unix

Февраль 13, 2018 г.

Ещё одна шпаргалка по администрированию UNIX серверов. На этот раз рассмотрим несколько полезных команд для создания бекапа базы данных из консоли. Нам понадобится команда mysqldump, которая позволяет создавать sql скрипт базы или её части. Создание ...

Читать

Mysqldump без блокировки таблиц

Ноябрь 11, 2019 г.

По умолчанию для mysqldump требуются права пользователя на блокировку таблиц. Потому, когда вы создаёте бекапы, вы можете получить сообщение вроде: mysqldump: Got error: 1044: "Access denied for user 'USER'@'%' to database 'DATABASENAME'" when ...

Читать

Как изменить значение AUTO_INCREMENT таблицы в MySQL

Август 3, 2022 г.

Наиболее простой ответ - это использование запроса alter, где вы задаёте новое значение для AUTO_INCREMENT нужной вам таблицы: [crayon-6a308954a7b0d278296775/] Вы можете достичь такого же эффекта изменениями соответствующего столбца вашей таблицы: ...

Читать

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

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

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

Читать
 

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

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



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