Импорт MySQL в Postgres. Проблемы с разрешениями

У меня есть базы данных MySql и Postgres. Я работал над Mysql DB, которая заполнена моими данными. Теперь для того, чтобы я использовал героку, мне нужно перенести его на Postgres. Вот шаги, которые я выполнил:

Я экспортировал данные из моей базы данных Mysql простой командой dump:

mysqldump -u [uname] -p[pass] db_name > db_backup.sql

Я вошел в свой Postgres

sudo su postgres

Теперь, когда я пытаюсь импортировать sql в Postgres, он не имеет доступа к db_backup.sql. Я изменил разрешения для всех пользователей и сделал файл дампа для чтения / записи для всех, но я все еще не могу импортировать sql.

Мой вопрос заключается в том, как правильно дублировать (и схему, и данные) из Mysql в Postgres. Кроме того, почему я не могу получить доступ к файлу дампа даже после изменения разрешений? И если у меня есть дамп из Mysql, каковы шансы, что он столкнется с проблемами при запуске его на Postgres (у меня нет никаких процедурных вещей в моем Mysql. Просто создание таблиц и сброс данных в эти таблицы.)?

Спасибо!

PS Я на Mac-Mavericks, если это имеет значение

1 ответ

Решение

В то время как на основную часть вопроса отвечал @wildplasser, я думал, что поставлю полный ответ для людей, которые смотрят на перенос данных MySQL в Postgres.

После опробования нескольких решений, самое простое и довольно гладкое решение было следующим: https://github.com/lanyrd/mysql-postgresql-converter

Это работало довольно гладко. Но только одна проблема - он не переносит никакие последовательности Mysql в Postgres. Это означает, что если у вас есть автоинкрементные первичные идентификаторы, вам придется изменить свою схему Postgres отдельно и создать последовательные последовательности после завершения портирования. Кроме того, это было довольно гладко.

Чтобы поговорить о проблеме с разрешениями, войти в систему как пользователь Postgres и попытаться получить доступ к дампу, созданному исходным пользователем, не удалось, правильным способом было оставаться в системе как оригинальный пользователь и использовать пользователя postgres только для работы с БД с помощью команды -U postgresuser,

Например: psql -U postgres databasename < data_base_dump

В то время как для многих это должно быть очевидным способом сделать это, я должен признать, что это был один из тех моментов эврики для меня:)

Другие вопросы по тегам