Как генерировать операторы SQL из миграций сиквела
Я хотел бы вывести сгенерированные операторы SQL из миграций сиквела в файл без подключения к реальной базе данных. Мне это нужно, потому что я хочу экспортировать операторы в форме MySQL, но я обычно использую PostgreSQL.
Я мог бы попытаться настроить MySQL и вывод с -E
вариант при создании базы данных, но это не так, как все должно работать правильно?
Что мне нужно, это что-то вроде:
sequel -m db/migrations/ -E --type mysql > msysql_statements.sql
Я использую сиквел с миграциями.
Есть ли способ добиться этого?
Испытания по ответам
Я попробовал команду, предложенную ответом Джереми Эванса:
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>'
К сожалению, он пытается получить доступ к базе данных mock.
Обновить
С ответом Джереми у меня было над чем поработать, я придумал следующий хакерский обходной путь, который генерирует по крайней мере большинство утверждений, но не все:(:
- вопрос
sequel -m db/migrations/ -t -E mock://mysql > mysql-statements.sql
- если вы получили исключение, закомментируйте оператор поднятия в коде сиквела
- на и у вас будет вывод с правильным оператором SQL, но с дополнительной информацией журнала
- удалите эту дополнительную информацию с помощью какого-либо инструмента для замены или проще с помощью редакторов с несколькими курсорами, таких как sublime или atom
- поставить точку с запятой в конце строки
- теперь у вас есть правильные MySQL заявления
- Не забудьте отменить изменения в sequel-gem-code;)
3 ответа
sequel -m db/migrations/ -E mock://mysql > msysql_statements.sql
Нет никакого способа сделать это в bash, как вы хотите, но вы можете использовать инструменты для этого. Дамп вашего PostgreSQL в этот инструмент, и он должен создать из него MySQL.
Существует другой инструмент с различными структурами БД на ваш выбор - SQLines
Nulldb https://github.com/nulldb/nulldb идеально подойдет для этого.