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

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
16
1
22 482
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

Там есть несколько проектов, но я не нашел ни одного работающего

djjeck 28.12.2012 05:38

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

На этой странице 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/…

djjeck 28.12.2012 05:27

Как говорит @m_gol, это не работает. Он создает файл sql, но его нельзя импортировать в pg.

Linus Oleander 28.03.2013 02:33

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

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

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

Я использовал это, и у меня это хорошо сработало. "mysqldump --compatible = postgresql" (из ответа vog) имеет слишком много проблем, чтобы быть полезным.

Michael Cho 13.10.2013 07:18

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

TheSatinKnight 08.01.2018 07:26

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