Ответ 1
Здесь есть опция mysqldump
, которая выводит код PostgreSQL:
mysqldump --compatible=postgresql ...
Я пробовал перечисленные инструменты здесь, некоторые с большим успехом, чем другие, но никто не дал мне действительный синтаксис postgres, который я мог бы использовать (tinyint ошибки и т.д.)
Здесь есть опция mysqldump
, которая выводит код PostgreSQL:
mysqldump --compatible=postgresql ...
Через некоторое время в Google я нашел этот пост.
[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/
На этой странице перечислены различия в синтаксисе, но простой рабочий конвертер запросов я еще не нашел. Использование ORM вместо необработанного 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
SQLines преобразует большинство из них в Интернете. Мне все же пришлось редактировать 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.
Посмотрите PG Foundry, дополнительные утилиты для Postgres, как правило, живут там. Я считаю, что инструмент, который вы ищете, существует, хотя.
вы, скорее всего, никогда не получите инструмент для выполнения такой задачи, которая сделает всю вашу работу за вас. будьте готовы сделать некоторые рефакторинговые работы самостоятельно.
Попробуйте это, он работает как шарм!
http://www.sqlines.com/online