Как в PHP-MyAdmin экспортировать БД для Postgres?

Рейтинг: 1Ответов: 2Опубликовано: 22.02.2023

Экспорт делаю из PHPMyAdmin на локальном компьютере c OpenServer 5.3.7 из БД MySQL, а импортирую через Adminer на докер с БД Postgres. Сделал экспорт БД в файл init.sql, и тут случилось интересное - в БД MySQL он прекрасно импортируется(и на локальную машину и в докер с MySQL), а в БД Postgress - нет. Сообщает об ошибке:

ERROR: unrecognized configuration parameter "sql_mode"

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

Ответы

▲ 1Принят

Дохлый номер. Синтаксисы MySQL и PostgreSQL совместимы ну очень чуть-чуть. Некоторые конструкции так и вовсе непереносимы и потребуют полного переписывания.

Рекомендую следующую последовательность действий.

  1. Экспорт из MySQL только структуры, без данных.
  2. Редактирование дампа вручную, адаптация синтаксиса под PostgreSQL.
  3. Загрузка дампа в PostgreSQL и проверка созданной структуры. При необходимости ручная рихтовка.
  4. Экспорт из MySQL только данных в файлы CSV (каждая таблица в отдельный файл, запросы SELECT INTO OUTFILE).
  5. Загрузка данных в таблицы PostgreSQL (каждая таблица отдельно, запросы COPY FROM).
▲ 0

Да, возможно проблема связана с тем, что синтаксис SQL-запросов и настройки БД MySQL и PostgreSQL различаются, и некоторые команды, поддерживаемые в MySQL, могут не поддерживаться в PostgreSQL. В данном случае, ошибка связана с тем, что параметр "sql_mode", который присутствует в экспортируемом файле для MySQL, не является параметром конфигурации для PostgreSQL.

Возможно, стоит попробовать экспортировать данные из MySQL с использованием другого инструмента, который поддерживает экспорт в PostgreSQL, например, pgloader или talend. Эти инструменты автоматически конвертируют SQL-запросы, созданные для MySQL, в соответствующий синтаксис PostgreSQL, что может помочь избежать ошибок при импорте.

Если использование других инструментов не подходит, можно попробовать вручную изменить экспортируемый файл init.sql, заменив команды, не поддерживаемые PostgreSQL, на соответствующие команды, поддерживаемые в PostgreSQL. Также стоит обратить внимание на использование типов данных и функций, поскольку они также могут отличаться в MySQL и PostgreSQL.

Наконец, при импорте в PostgreSQL можно попробовать использовать опцию --no-sequences, чтобы избежать ошибок, связанных с использованием последовательностей в MySQL, которые не поддерживаются в PostgreSQL. команда импорта может выглядеть так:

psql -U username -d dbname -f init.sql --no-sequences