Rails created_at时间戳顺序不同意id顺序

时间:2011-04-28 12:18:19

标签: ruby-on-rails

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

  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而不是时间戳进行排序来解决这个问题,但是无法想象它是如何发生的。该应用程序使用了几个mongrel实例,但它们都在同一台机器上(Debian Lenny);我错过了一些明显的东西吗DB是Postgres。

1 个答案:

答案 0 :(得分:5)

因为Rails使用database sequenceinsert上为id字段(至少在PostgreSQL中)获取新ID,或者如果数据库支持,则使用RETURNING关键字它

但它会使用ActiveRecord::Timestamp#create_with_timestamps方法更新创建的created_atupdated_at字段,该方法使用系统时间。

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