我有一个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而不是时间戳进行排序来解决这个问题,但是无法想象它是如何发生的.该应用程序使用了几个mongrel实例,但它们都在同一台机器上(Debian Lenny); 我错过了一些明显的东西吗 DB是Postgres.
因为Rails使用数据库序列id
在插入时为您的字段(至少在PostgreSQL中)获取新的id,或者RETURNING
如果数据库支持它,则使用关键字.
但是它使用使用系统时间的方法更新了创建created_at
和updated_at
字段ActiveRecord::Timestamp#create_with_timestamps
.
该行1154
稍后插入,但created_at
之前计算了字段的时间戳.