Я пробовал перечисленные инструменты здесь, некоторые с большим успехом, чем другие, но ни один из них не дал мне допустимого синтаксиса postgres, который я мог бы использовать (ошибки tinyint и т. д.)






Взгляните на PG Foundry, там обычно живут дополнительные утилиты для Postgres. Я считаю, что инструмент, который вы ищете, действительно существует.
Там есть несколько проектов, но я не нашел ни одного работающего
вы, скорее всего, никогда не получите инструмент для такой задачи, который бы выполнял всю вашу работу за вас. будьте готовы провести некоторую работу по рефакторингу самостоятельно.
На этой странице postgresql есть одно платное программное обеспечение: http://www.postgresql.org/download/products/1
и это на pgFoundry: http://pgfoundry.org/projects/mysql2pgsql/
Есть опция mysqldump, которая позволяет выводить код PostgreSQL:
mysqldump --compatible=postgresql ...
В документации сказано, что вывод просто "более совместим". dev.mysql.com/doc/refman/5.1/en/…
Как говорит @m_gol, это не работает. Он создает файл sql, но его нельзя импортировать в pg.
Через некоторое время в Google я нашел эта почта.
[sudo] gem install mysql2psql.mysql2psql. Вы увидите сообщение об ошибке, но файл mysql2psql.yml должен был быть создан.mysql2psql.ymlmysql2psql, чтобы перенести данные.Совет: Установите force_truncate на true в файле конфигурации mysql2psql.yml, если вы хотите, чтобы база данных postgresql была очищена перед переносом данных.
Я использовал это, и у меня это хорошо сработало. "mysqldump --compatible = postgresql" (из ответа vog) имеет слишком много проблем, чтобы быть полезным.
Я использовал 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.
Эта страница перечисляет различия синтаксиса, но простой рабочий преобразователь запросов я еще не нашел. Использование пакета ORM вместо необработанного SQL может предотвратить эти проблемы.
Сейчас я взламываю конвертер для устаревшей кодовой базы:
function mysql2pgsql($mysql){
return preg_replace("/limit (\d+), *(\d+)/i", "limit offset ", preg_replace("/as '([^']+)'/i", 'as ""', $mysql)); // Note: limit needs order
}
Для операторов CREATESQLines преобразует большинство из них онлайн. Впрочем, мне все равно пришлось потом редактировать 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
Гм. Нулевой эффект. Он вообще ничего не изменил в sql-запросе, и в запросе было "left (". Это должно было быть преобразовано в "substring (".
возможный дубликат Есть ли официальный инструмент для переноса базы данных MySQL на PostgreSQL?