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

StackOverflow https://stackoverflow.com/questions/92043

  •  01-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

mysqldump --compatible=postgresql ...

Другие советы

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

  1. Установите mysql2psql использование драгоценного камня [sudo] gem install mysql2psql.
  2. Создайте конфигурационный файл, выполнив команду mysql2psql.Вы увидите ошибку, но mysql2psql.yml файл должен был быть создан.
  3. Редактировать mysql2psql.yml
  4. Бежать 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, как правило, находятся там.Тем не менее, я верю, что инструмент, который вы ищете, действительно существует.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top