Rails create_at时间戳顺序与id顺序不一致



我有一个Rails 2.3.5应用程序,其中包含id和created_at列。这个表记录了实体的状态随时间的变化,所以我偶尔会用它来查找一个实体在特定时间的状态,方法是查找在该时间之前发生的状态变化,并根据时间戳created_at选择最新的状态变化。对于1445个实体中的10个,状态更改的时间戳与id的顺序不同,并且最后一次状态更改的状态与实体本身存储的状态不同,例如

  id  |     created_at      | entity_id | state |
------+---------------------+-----------+-------+
 1151 | 2009-01-26 10:27:02 | 219       | 1     | 
 1152 | 2009-01-26 10:27:11 | 219       | 2     | 
 1153 | 2009-01-26 10:27:17 | 219       | 4     | 
 1154 | 2009-01-26 10:26:41 | 219       | 5     | 

我可能可以通过排序id而不是时间戳来解决这个问题,但我想不出一个解释它是如何发生的。该应用程序使用几个杂种实例,但它们都在同一台机器上(Debian Lenny);我错过了什么明显的东西吗?

因为Rails使用数据库序列来获取id字段的新id(至少在PostgreSQL中)在插入或RETURNING关键字时,如果数据库支持它,

但是它在创建时使用ActiveRecord::Timestamp#create_with_timestamps方法更新created_atupdated_at字段,这使用了系统时间。

1154行是稍后插入的,但created_at字段的时间戳是在之前计算的。

最新更新