web-dev-qa-db-fra.com

Comment puis-je importer un fichier SQL dans une base de données Rails?

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?

48
Nathan Long

La manière la plus simple:

bundle exec Rails db < $SQL_FILE

exemple:

bundle exec Rails db < my_db.sql
42
Abel

La voie facile

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).

Notes de bas de page

  • Cette question connexe impliquait cette solution, mais la rejetait pour les grosses importations. Je voulais le montrer explicitement, car cela fonctionne pour les plus petits.
  • Le fichier que j'essayais d'importer contenait un 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.
42
Nathan Long

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
15
joost