【发布时间】:2016-07-15 11:48:23
【问题描述】:
我想将 Sequel 迁移中生成的 SQL 语句输出到一个文件,而无需连接到实际数据库。 我需要这个,因为我想以 MySQL 形式导出语句,但我通常使用 PostgreSQL。
我可以在创建数据库时尝试设置 MySQL 并使用 -E 选项输出,但这不应该是这样吗?
我需要的是这样的:
sequel -m db/migrations/ -E --type mysql > msysql_statements.sql
我正在使用 Sequel 和 migrations。
有没有办法做到这一点?
根据答案进行试验
我尝试了 Jeremy Evans 的答案提出的命令:
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>'
不幸的是,它似乎试图从模拟数据库中访问某些东西。
更新
根据 Jeremy 的回答,我有一些工作要做,我想出了以下 hacky 解决方法,它至少会生成大部分语句,但不是全部 :( :
- 问题
sequel -m db/migrations/ -t -E mock://mysql > mysql-statements.sql - 如果遇到异常,请注释掉后续代码中的 raise 语句
- 此时,您将获得带有正确 sql 语句的输出,但带有额外的日志记录信息
- 使用一些替换工具或使用 sublime 或 atom 等多光标编辑器更轻松地删除这些额外信息
- 在行尾加分号
- 现在你有了正确的 mysql 语句
- 不要忘记恢复对 sequel-gem-code 的修改 ;)
【问题讨论】:
标签: ruby migration sequel sequel-gem