如何将SQL文件导入Rails数据库?
我有一个如何将SQL文件导入Rails数据库?,sql,ruby-on-rails,Sql,Ruby On Rails,我有一个.sql文件,我想使用Rake任务将其加载到Rails数据库中。我该怎么做?简单的方法 这适用于简单的情况 ActiveRecord::Base.connection.execute(IO.read("path/to/file")) 从2006年开始在上找到解决方案(但在2011年Rails 3.1上仍然有效) 脚注 暗示了这一解决方案,但拒绝了大量进口。我想明确地展示它,因为它适用于较小的 我试图导入的文件包含一个锁表,后跟一个insert。数据是用于MySQL数据库的Mysql2
.sql
文件,我想使用Rake任务将其加载到Rails数据库中。我该怎么做?简单的方法
这适用于简单的情况
ActiveRecord::Base.connection.execute(IO.read("path/to/file"))
从2006年开始在上找到解决方案(但在2011年Rails 3.1上仍然有效)
脚注
- 暗示了这一解决方案,但拒绝了大量进口。我想明确地展示它,因为它适用于较小的李>
- 我试图导入的文件包含一个
,后跟一个insert。数据是用于MySQL数据库的锁表
说它有一个无效的SQL语法错误,直到我删除了lock和unlock语句Mysql2
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
最简单的方法:
bundle exec rails db < $SQL_FILE
bundle exec rails db<$SQL\u文件
例如:
bundle exec rails db
几年后更新:对于PostgreSQL,我只使用Rake db:drop db:create
然后cat somefile.sql | psql name _of_database
。转储是pg\u dump name\u of_database>somefile.sql
。如何将其添加到Rake任务中?使用rails 5+rails db
也可以。我得到ActiveRecord::语句无效:pg::UnableToSend:另一个命令已经在执行中了
我的答案是针对MySQL而不是Postgres的。似乎有多个进程正在访问数据库。如果您忘记了“;”SQL查询结束时,statements.pop#remote空行
将删除最后一个查询。您可以使用以下方法来避免这种情况,statements.pop if statements[-1]=~/^\s+$/
bundle exec rails db < my_db.sql