【发布时间】:2012-01-10 16:11:22
【问题描述】:
我有一个.sql 文件,我想使用 Rake 任务将其加载到我的 Rails 数据库中。我该怎么做?
【问题讨论】:
标签: sql ruby-on-rails
我有一个.sql 文件,我想使用 Rake 任务将其加载到我的 Rails 数据库中。我该怎么做?
【问题讨论】:
标签: sql ruby-on-rails
这适用于简单的情况。
ActiveRecord::Base.connection.execute(IO.read("path/to/file"))
2006 年在 Ruby On Rails mailing list 上找到的解决方案(但在 2011 年仍然适用于 Rails 3.1)。
LOCK TABLES,后跟一个插入。数据用于 MySQL 数据库。 Mysql2 说它有一个无效的 SQL 语法错误,直到我删除了 lock 和 unlock 语句。【讨论】:
rake db:drop db:create 和 cat somefile.sql | psql name_of_database,而不是 Rake 任务。倾销是pg_dump name_of_database > somefile.sql。
在 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
【讨论】:
ActiveRecord::StatementInvalid: PG::UnableToSend: another command is already in progress
statements.pop # remote empty line 将删除您的最后一个查询。您可以使用以下方法来避免这种情况,statements.pop if statements[-1] =~ /^\s+$/
最简单的方法:
bundle exec rails db < $SQL_FILE
例子:
bundle exec rails db < my_db.sql
【讨论】:
rails db < my_sql.sql 也可以