Как генерировать операторы SQL из миграций Sequel

Я хотел бы вывести сгенерированные операторы SQL из миграции Sequel в файл без подключения к фактической базе данных. Мне это нужно, потому что я хочу экспортировать операторы в форме MySQL, но обычно я использую PostgreSQL.

Я мог бы попытаться настроить MySQL и выводить с параметром -E при создании базы данных, но это не так, как все должно работать правильно?

Мне нужно что-то вроде:

sequel -m db/migrations/ -E --type mysql > msysql_statements.sql

Я использую Sequel с миграции.

Есть ли способ добиться этого?

Испытания по ответам

Я попробовал команду, предложенную ответом Джереми Эванса:

sequel -m db/migrations/ -t -E mock://mysql

ошибка следующая:

  I, [2016-07-18T13:57:09.020630 #21573]  INFO -- : SELECT NULL AS `nil` FROM `schema_migrations` LIMIT 1
  I, [2016-07-18T13:57:09.020802 #21573]  INFO -- : SELECT * FROM `schema_migrations` LIMIT 1
  /home/me/.rvm/gems/ruby-2.2.1/gems/sequel-4.34.0/lib/sequel/extensions/migration.rb:751:in `schema_dataset': Migrator table schema_migrations does not contain column filename (Sequel::Migrator::Error)
    from /home/me/.rvm/gems/ruby-2.2.1/gems/sequel-4.34.0/lib/sequel/extensions/migration.rb:450:in `initialize'
    from /home/me/.rvm/gems/ruby-2.2.1/gems/sequel-4.34.0/lib/sequel/extensions/migration.rb:652:in `initialize'
    from /home/me/.rvm/gems/ruby-2.2.1/gems/sequel-4.34.0/lib/sequel/extensions/migration.rb:397:in `new'
    from /home/me/.rvm/gems/ruby-2.2.1/gems/sequel-4.34.0/lib/sequel/extensions/migration.rb:397:in `run'
    from /home/me/.rvm/gems/ruby-2.2.1/gems/sequel-4.34.0/lib/sequel/extensions/migration.rb:368:in `apply'
    from /home/me/.rvm/gems/ruby-2.2.1/gems/sequel-4.34.0/bin/sequel:160:in `<top (required)>'
    from /home/me/.rvm/gems/ruby-2.2.1/bin/sequel:23:in `load'
    from /home/me/.rvm/gems/ruby-2.2.1/bin/sequel:23:in `<main>'
    from /home/me/.rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `eval'
    from /home/me/.rvm/gems/ruby-2.2.1/bin/ruby_executable_hooks:15:in `<main>'

К сожалению, кажется, что он пытается получить доступ к чему-то из фиктивной базы данных.

Обновлять

С ответом Джереми мне было над чем поработать, я придумал следующий хакерский обходной путь, который генерирует, по крайней мере, большинство утверждений, но не все :( :

  • выпуск sequel -m db/migrations/ -t -E mock://mysql > mysql-statements.sql
  • если вы получаете исключение, закомментируйте оператор повышения в коде продолжения
  • в, и вы получите вывод с правильным оператором sql, но с дополнительной информацией журнала
  • удалите эту дополнительную информацию, используя какой-либо инструмент замены или проще с помощью редакторов с несколькими курсорами, таких как возвышенное или атом
  • поставить точку с запятой в конце строки
  • теперь у вас есть правильные операторы mysql
  • Не забудьте отменить изменения в сиквел-гем-коде ;)

person farukg    schedule 15.07.2016    source источник


Ответы (3)


Nulldb https://github.com/nulldb/nulldb идеально подойдет для этого.

person AnoE    schedule 15.07.2016
comment
Это должен быть комментарий, а не ответ. - person Aleksei Matiushkin; 15.07.2016
comment
Я не использую активную запись, так что для меня это не идеально :) - person farukg; 15.07.2016
comment
Извините, поторопился с выводами. ;) - person AnoE; 17.07.2016

В bash нет способа сделать это так, как вы хотите, но вы можете использовать для этого инструменты. Скопируйте ваш PostgreSQL в этот инструмент, и он должен создать из него MySQL.

На ваш выбор есть еще один инструмент с различными фреймворками БД - SQLines.

person Maxim Fedotov    schedule 15.07.2016

person    schedule
comment
эй, спасибо за ваш ответ, но у меня была проблема, я обновил свой вопрос, описывающий ее - person farukg; 18.07.2016
comment
я как бы заставил его делать то, что мне нужно, выполнив следующие хакерские шаги, см. Обновление в Вопросе - person farukg; 18.07.2016