【问题标题】:How to generate SQL statements from Sequel migrations如何从 Sequel 迁移生成 SQL 语句
【发布时间】:2016-07-15 11:48:23
【问题描述】:

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

我可以在创建数据库时尝试设置 MySQL 并使用 -E 选项输出,但这不应该是这样吗?

我需要的是这样的:

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

我正在使用 Sequelmigrations

有没有办法做到这一点?

根据答案进行试验

我尝试了 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 &gt; mysql-statements.sql
  • 如果遇到异常,请注释掉后续代码中的 raise 语句
  • 此时,您将获得带有正确 sql 语句的输出,但带有额外的日志记录信息
  • 使用一些替换工具或使用 sublime 或 atom 等多光标编辑器更轻松地删除这些额外信息
  • 在行尾加分号
  • 现在你有了正确的 mysql 语句
  • 不要忘记恢复对 sequel-gem-code 的修改 ;)

【问题讨论】:

    标签: ruby migration sequel sequel-gem


    【解决方案1】:
    sequel -m db/migrations/ -E mock://mysql > msysql_statements.sql
    

    【讨论】:

    • 嘿,谢谢你的回答,但我有一个问题,我更新了描述它的问题
    • 我通过以下 hacky 步骤完成了我需要的工作,请参阅问题中的更新
    【解决方案2】:

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

    【讨论】:

    • 这应该是评论,而不是答案。
    • 我没有使用活动记录,所以对我来说它一点也不完美:)
    • 抱歉,草草下结论。 ;)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2021-12-22
      • 2023-01-17
      • 2015-09-13
      • 1970-01-01
      相关资源
      最近更新 更多