【问题标题】:PostgreSQL query to get events occurring within microseconds of each otherPostgreSQL 查询以获取彼此在微秒内发生的事件
【发布时间】:2014-05-06 00:14:43
【问题描述】:

Ruby on Rails 的 ActiveRecord 的 destroy_all 方法为每条记录生成一个 SQL DELETE 查询。我们在 Web 应用程序中有一个页面,允许用户删除关联的记录。由于deleted_at 时间戳相差几微秒,因此对同时删除的所有记录进行分组变得具有挑战性。以下是一些示例数据:

id | deleted_at
----+---------------------------- 71 | 45 | 2014-04-29 18:35:00.676153 46 | 2014-04-29 18:35:00.685657 47 | 2014-04-30 21:11:00.73096 48 | 2014-04-30 21:11:00.738533 49 | 2014-04-30 21:11:00.745232 50 | 51 | (8 rows)

因此您可以看到这里有两个事件,一个影响 2 行(id 为 45 和 46),一个影响 3 行(id 为 47、48 和 49)。我的问题是如何查询此表,以便将每个事件分组为一行?我考虑过使用extract(microseconds from r.deleted_at),但如果秒数被包装,那将失败。我想要一个查询,甚至是一个函数,它可以比较每条记录并将具有deleted_at 的记录分组在一定的阈值内。

编辑:我应该提到我不能使用delete_all,因为我想要运行回调。我们正在使用paranoia gem 软删除记录。

【问题讨论】:

    标签: sql ruby-on-rails postgresql


    【解决方案1】:

    我找到了解决方法。我可以简单地使用update_all 手动设置时间戳,而不是依赖于 ActiveRecord 回调。所以我用Model.where(...).update_all(deleted_at: Time.current)代替Model.where(...).delete_all。现在我可以轻松地按时间戳分组了。

    如果有人想回答原始 PostgreSQL 查询问题,我很乐意为分数选择正确答案。

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 2022-07-05
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2014-06-11
      • 2012-04-07
      • 1970-01-01
      相关资源
      最近更新 更多