Есть ли простой инструмент для преобразования mysql в синтаксис postgresql? - PullRequest
15 голосов
/ 18 сентября 2008

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

Ответы [ 8 ]

10 голосов
/ 20 сентября 2008

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

mysqldump --compatible=postgresql ...
3 голосов
/ 28 марта 2013

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

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

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

1 голос
/ 03 сентября 2013

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

0 голосов
/ 06 ноября 2017

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

http://www.sqlines.com/online
0 голосов
/ 22 сентября 2017

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

На этой странице postgresql есть одно платное программное обеспечение: http://www.postgresql.org/download/products/1

и это на pgFoundry: http://pgfoundry.org/projects/mysql2pgsql/

0 голосов
/ 18 сентября 2008

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

0 голосов
/ 18 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...