J'ai un .sql
que j'aimerais charger dans ma base de données Rails à l'aide d'une tâche Rake. Comment puis-je faire cela ?
Comment ajouter ceci à une tâche Rake ?
J'ai un .sql
que j'aimerais charger dans ma base de données Rails à l'aide d'une tâche Rake. Comment puis-je faire cela ?
Cela fonctionne pour les cas simples.
ActiveRecord::Base.connection.execute(IO.read("path/to/file"))
Solution trouvée sur le site Liste de diffusion Ruby On Rails datant de 2006 (mais qui fonctionne toujours en 2011 sur Rails 3.1).
LOCK TABLES
suivi d'un insert. Les données étaient destinées à une base de données MySQL. Mysql2
disait qu'il y avait une erreur de syntaxe SQL invalide jusqu'à ce que je supprime les instructions de verrouillage et de déverrouillage.Sur MySQL, cela m'a donné une erreur de syntaxe. En divisant le code SQL en déclarations, cela a fonctionné.
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
Je reçois ActiveRecord::StatementInvalid: PG::UnableToSend: another command is already in progress
Ma réponse concernait MySQL et non Postgres. Il semble que vous ayez plusieurs processus accédant à votre base de données.
Si vous oubliez le ';' à la fin de votre requête SQL, le programme statements.pop # remote empty line
supprimera votre dernière requête. Vous pouvez utiliser ce qui suit pour éviter cela, statements.pop if statements[-1] =~ /^\s+$/
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.