Есть ли простой инструмент для преобразования синтаксиса mysql в postgresql?
-
01-07-2019 - |
Вопрос
Я перепробовал перечисленные инструменты здесь, некоторые с большим успехом, чем другие, но ни один из них не дал мне допустимого синтаксиса postgres, который я мог бы использовать (ошибки tinyint и т.д.)
Решение
Там есть mysqldump
опция, которая позволяет ему выводить код PostgreSQL:
mysqldump --compatible=postgresql ...
Другие советы
Через некоторое время в Google я нашел этот пост.
- Установите mysql2psql использование драгоценного камня
[sudo] gem install mysql2psql
. - Создайте конфигурационный файл, выполнив команду
mysql2psql
.Вы увидите ошибку, ноmysql2psql.yml
файл должен был быть создан. - Редактировать
mysql2psql.yml
- Бежать
mysql2psql
снова для переноса ваших данных.
Подсказка:Установленный force_truncate
Для true
в вашем mysql2psql.yml
конфигурационный файл, если вы хотите, чтобы база данных postgresql была очищена перед переносом ваших данных.
Я использовал py-mysql2pgsql.После установки ему нужен только простой конфигурационный файл в формате yml (исходный, конечный), например:
# if a socket is specified we will use that
# if tcp is chosen you can use compression
mysql:
hostname: localhost
port: 3306
socket: /tmp/mysql.sock
username: mysql2psql
password:
database: mysql2psql_test
compress: false
destination:
# if file is given, output goes to file, else postgres
file:
postgres:
hostname: localhost
port: 5432
username: mysql2psql
password:
database: mysql2psql_test
Использование:
> py-mysql2pgsql -h
usage: py-mysql2pgsql [-h] [-v] [-f FILE]
Tool for migrating/converting data from mysql to postgresql.
optional arguments:
-h, --help show this help message and exit
-v, --verbose Show progress of data migration.
-f FILE, --file FILE Location of configuration file (default:
mysql2pgsql.yml). If none exists at that path,
one will be created for you.
Подробнее на его домашней странице https://github.com/philipsoutham/py-mysql2pgsql.
На этой странице postgresql указано одно платное программное обеспечение:http://www.postgresql.org/download/products/1
и это на PgFoundry:http://pgfoundry.org/projects/mysql2pgsql/
Эта страница перечислены синтаксические различия, но простого рабочего преобразователя запросов я пока не нашел.Используя ОРМ пакет вместо необработанного SQL мог бы предотвратить эти проблемы.
В настоящее время я взламываю конвертер для устаревшей кодовой базы:
function mysql2pgsql($mysql){
return preg_replace("/limit (\d+), *(\d+)/i", "limit $1 offset $2", preg_replace("/as '([^']+)'/i", 'as "$1"', $mysql)); // Note: limit needs order
}
Для CREATE
заявления, Квадратные линии конвертирует большинство из них онлайн.Однако после этого мне все равно пришлось отредактировать mysqldump:
"mediumtext" -> "text", "^LOCK.*" -> "", "^UNLOCK.*" -> "", "`" -> '"', "'" -> "''" in 'data', "0000-00-00" -> "2000-01-01", deduplicate constraint names, " CHARACTER SET utf8 " -> " ".
"int(10)" -> "int" was missed in the last table, so pass that part of the mysqldump through http://www.sqlines.com/online again.
Попробуйте это , оно работает просто очаровательно !!
http://www.sqlines.com/online
Взгляните на Литейный цех PG, дополнительные утилиты для Postgres, как правило, находятся там.Тем не менее, я верю, что инструмент, который вы ищете, действительно существует.
скорее всего, вы никогда не получите инструмент для такой задачи, который сделал бы всю вашу работу за вас.будьте готовы проделать некоторую работу по рефакторингу самостоятельно.