J'ai un .sql
fichier que j'aimerais charger dans ma base de données Rails à l'aide d'une tâche Rake. Comment faire?
La manière la plus simple:
bundle exec Rails db < $SQL_FILE
exemple:
bundle exec Rails db < my_db.sql
Cela fonctionne pour les cas simples.
ActiveRecord::Base.connection.execute(IO.read("path/to/file"))
Solution trouvée sur le Ruby on Rails mailing list de 2006 (mais fonctionne toujours en 2011 sur Rails 3.1).
LOCK TABLES
suivi d'un encart. Les données étaient pour une base de données MySQL. Mysql2
a indiqué qu'il contenait une erreur de syntaxe SQL non valide jusqu'à ce que j'enlève les instructions de verrouillage et de déverrouillage.Sur MySQL, cela m'a donné une erreur de syntaxe. La division du sql en instructions l'a fait fonctionner.
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