【问题标题】:Delete all except the last x number of rows in database删除数据库中除最后 x 行之外的所有行
【发布时间】:2013-06-10 01:43:20
【问题描述】:

有没有办法使用 rake 从数据库中删除除最后 30 个左右的结果之外的所有结果?我是否必须获取数据库计数,从 30 开始检查结果,然后删除之前创建日期的所有内容?

【问题讨论】:

    标签: ruby-on-rails database rake delete-row


    【解决方案1】:

    当然,按照你的建议去做:

    delete_all_but_oldest_30.rake:

    task :delete_all_but_oldest_30 => :environment do
      query = MyModel.order("created_at desc")
      query.limit(query.count - 30).destroy_all
    end
    

    您应该根据自己的需要自定义它——您只需要确定“最后一个”的含义:最旧、最高 ID、最低 ID 等。只需使用您想要的任何顺序的相反顺序,以便最后 30结果是您想要保留的结果。所以要保持最低的 ID,请按"id desc" 排序。


    注意:这在技术上并不能保证准确地留下 30 条记录,因为它是非事务性的。当此 rake 任务运行时异步添加更多记录时,结果不确定。根据您的应用程序,这可能是也可能不是问题。如果您只是删除旧记录,我怀疑这个 rake 任务很好。如果没有,您可以将整个任务包装在 transaction 中。但是,如果您要删除大量记录,则不建议这样做,因为事务会占用数据库。

    【讨论】:

    • 太棒了!太感谢了。我想我有概念,但没有语法。这是一个如此简单的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2011-04-16
    相关资源
    最近更新 更多