【问题标题】:Running sql file using rails migration file使用 rails 迁移文件运行 sql 文件
【发布时间】:2017-03-02 10:32:23
【问题描述】:

我在运行包含多个在 db 中创建表的 sql 查询的 sql 文件时遇到问题。 db是DB2,我创建了一个迁移文件,它在其中读取一个sql文件并执行该文件中的sql查询,问题是它只执行一个查询并在该sql文件中只创建一个表,即第一个查询.

知道如何解决这个问题

代码片段如下:

enter code here
class CreateTablesForPoject < ActiveRecord::Migration
  def change
    begin
      user = RailsUser.first
    rescue => e 
     fixed_patches = %w(CREATETABLES.sql)

     sql = File.read("db/ddl/#{fixed_patches.first}")

     statements = sql.split(/;$/)

     statements.each do |statement|
       execute(statement)
     end
    end
  end
end

注意:文件读取和查询拆分都很好..它没有任何问题迁移运行并执行所有查询,但是当alter table查询或任何基于pervious table的查询时失败创建失败。我觉得的问题是,在运行一个查询后,数据库连接断开,因此没有创建表,因此基于先前表创建的查询失败。

【问题讨论】:

  • 你试过什么调试?例如分配给语句的结果是什么?该拆分语句是否返回了您期望的结果? File.read 语句同上。
  • @margo:文件读取和查询拆分都很好..它没有任何问题迁移运行并执行所有查询,但在alter table查询或任何查询时失败基于以前的表创建失败。我觉得的问题是,在运行一个查询后,数据库连接断开,因此没有创建表,因此基于先前表创建的查询失败

标签: ruby-on-rails ruby ruby-on-rails-4 db2 migration


【解决方案1】:

试试这个:

class CreateTablesForPoject < ActiveRecord::Migration
  def change
    begin
      user = RailsUser.first
    rescue => e 
     fixed_patches = %w(CREATETABLES.sql)

     sql = File.read("db/ddl/#{fixed_patches.first}")
     statements = sql.split(/;/)
     statements.pop # remote empty line
     ActiveRecord::Base.transaction do
      statements.each do |statement|
        connection.execute(statement)
      end
    end
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2020-01-07
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多