Есть ли простой инструмент для преобразования mysql в синтаксис postgresql?

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

Ответы

Ответ 1

Здесь есть опция mysqldump, которая выводит код PostgreSQL:

mysqldump --compatible=postgresql ...

Ответ 2

Через некоторое время в Google я нашел этот пост.

  • Установите mysql2psql с помощью [sudo] gem install mysql2psql.
  • Создайте файл конфигурации, запустив mysql2psql. Вы увидите ошибку, но должен быть создан файл mysql2psql.yml.
  • Изменить mysql2psql.yml
  • Запустите mysql2psql снова, чтобы перенести данные.

Совет: установите force_truncate в true в конфигурационный файл mysql2psql.yml, если вы хотите, чтобы база данных postgresql была очищена до миграции ваших данных.

Ответ 3

Я использовал 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.

Ответ 5

На этой странице перечислены различия в синтаксисе, но простой рабочий конвертер запросов я еще не нашел. Использование 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.

Ответ 6

Посмотрите PG Foundry, дополнительные утилиты для Postgres, как правило, живут там. Я считаю, что инструмент, который вы ищете, существует, хотя.

Ответ 7

вы, скорее всего, никогда не получите инструмент для выполнения такой задачи, которая сделает всю вашу работу за вас. будьте готовы сделать некоторые рефакторинговые работы самостоятельно.

Ответ 8

Попробуйте это, он работает как шарм!

http://www.sqlines.com/online