2

我想将生成的 SQL 语句从 Sequel 迁移输出到文件,而无需连接到实际数据库。我需要这个,因为我想以 MySQL 形式导出语句,但我通常使用 PostgreSQL。

我可以在创建数据库时尝试使用该选项设置 MySQL 和输出-E,但这不应该是正确的工作方式吗?

我需要的是这样的:

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

我正在使用带有 迁移的Sequel

有没有办法做到这一点?

根据答案进行试验

我尝试了命令提出的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 的修改;)
4

3 回答 3

2
sequel -m db/migrations/ -E mock://mysql > msysql_statements.sql
于 2016-07-15T15:27:08.897 回答
0

没有办法像你想要的那样在 bash 中做到这一点,但你可以使用工具来做到这一点。将你的 PostgreSQL 转储到这个工具中,它应该从中创建一个 MySQL。

还有另一种带有各种数据库框架的工具供您选择 - SQLines

于 2016-07-15T13:46:06.653 回答
0

Nulldb https://github.com/nulldb/nulldb将是完美的。

于 2016-07-15T11:56:32.770 回答