Экспорт данных из 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 Incorrect datetime value: '0000-00-00 00:00:00'

Февраль 16, 2023 г.

Появляется, если поле типа datetime уже содержит подобные нулевые значения при попытке изменить как тип поля (через alter table), так и сами значения в таблице. Вероятно ошибка возникает, если вы импортировали данные в вашу базу. Скорее всего из-за ...

Читать

Создание бекапов базы mySQL из консоли unix

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

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

Читать

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

Январь 19, 2023 г.

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

Читать

Создать пользователя MySQL и выдать ему права на базу данных

Июль 20, 2023 г.

Обычно для этого требуется выполнить две команды - создать пользователя, выдать права. Создание пользователя MySQL Для нашей цели достаточно выполнить следующую команду: [crayon-6ae8248a3bd27470823457/] Где new-user-name - имя нового пользователя, ...

Читать
 

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

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



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