Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将SQL文件导入Rails数据库?_Sql_Ruby On Rails - Fatal编程技术网

如何将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数据库的
    Mysql2
    说它有一个无效的SQL语法错误,直到我删除了lock和unlock语句

在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

最简单的方法:

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