【发布时间】:2017-01-26 05:38:36
【问题描述】:
我想创建一个 rake 任务,以便从某个 n 数量的表中删除所有记录并重置 id 列的值,这样当我创建新记录时它的 id 为 1。
上一个问题Truncate table(s) with rails console 对于完成单个表的工作很有用(如果可以提高任务的性能,我会使用delete_all 代替destroy_all):
Model.delete_all
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name} RESTART IDENTITY")
如果我需要截断多个表,例如表table1、table2、table3,是否有机会使用单个 ActiveRecord 连接,例如:
Model1.delete_all
Model2.delete_all
Model3.delete_all
ActiveRecord::Base.connection.execute("TRUNCATE #{table1, table2, table3} RESTART IDENTITY")
因此避免像下面的示例那样建立多个 ActiveRecord 连接?
Model1.delete_all
Model2.delete_all
Model3.delete_all
ActiveRecord::Base.connection.execute("TRUNCATE #{table1} RESTART IDENTITY")
ActiveRecord::Base.connection.execute("TRUNCATE #{table2} RESTART IDENTITY")
ActiveRecord::Base.connection.execute("TRUNCATE #{table3} RESTART IDENTITY")
【问题讨论】:
-
即使你尝试使用原始 SQL,它也需要复杂的查询,检查这个 SO 线程stackoverflow.com/questions/15926826/truncate-multi-tables
-
我可能在 Postgresql 文档中找到了解决方案:postgresql.org/docs/9.1/static/sql-truncate.html
标签: ruby-on-rails postgresql sql-delete