如何将SQL文件导入Rails数据库?

Nat*_*ong 47 sql ruby-on-rails

我有一个.sql文件,我想使用Rake任务加载到我的Rails数据库中.我怎样才能做到这一点?

Abe*_*bel 44

最简单的方法:

bundle exec rails db < $SQL_FILE
Run Code Online (Sandbox Code Playgroud)

例:

bundle exec rails db < my_db.sql
Run Code Online (Sandbox Code Playgroud)

  • 使用 Rails 5+ `rails db &lt; my_sql.sql` 也可以工作 (2认同)

Nat*_*ong 43

简单的方法

这适用于简单的情况.

ActiveRecord::Base.connection.execute(IO.read("path/to/file"))
Run Code Online (Sandbox Code Playgroud)

从2006 开始在Ruby On Rails邮件列表中找到的解决方案(但仍然在2011年的Rails 3.1上运行).

脚注

  • 这个相关问题暗示了这个解决方案,但是对于大量进口却拒绝了.我想明确地展示它,因为它适用于较小的.
  • 我试图导入的文件包含一个LOCK TABLES后跟一个插入.数据用于MySQL数据库.Mysql2在我删除了锁定和解锁语句之前,它说它的SQL语法错误无效.

  • 多年后更新:对于PostgreSQL而不是Rake任务,我只使用`rake db:drop db:create`然后`cat somefile.sql | psql name_of_database`.转储是`pg_dump name_of_database> somefile.sql`. (5认同)
  • 似乎仍然在Rails 4中工作. - 谢谢 (2认同)

joo*_*ost 15

在MySQL上,这给了我一个语法错误.将sql拆分为语句使其工作.

sql = File.read(sql_file)
statements = sql.split(/;$/)
statements.pop # remove empty line
ActiveRecord::Base.transaction do
  statements.each do |statement|
    connection.execute(statement)
  end
end
Run Code Online (Sandbox Code Playgroud)