Ruby on rails PostgreSQL总是创建具有偶数ID的记录?
出于某种原因,我的PostgreSQL 9.2数据库会跳过每个记录的ID。例如: 使用者Ruby on rails PostgreSQL总是创建具有偶数ID的记录?,ruby-on-rails,ruby-on-rails-3,postgresql,Ruby On Rails,Ruby On Rails 3,Postgresql,出于某种原因,我的PostgreSQL 9.2数据库会跳过每个记录的ID。例如: 使用者 这是什么原因造成的?任何指向解决此问题的正确方向的指针都是值得赞赏的。谢谢这些评论充分说明了可能的原因: 多个nextval调用,比如一个default调用和一个explicit调用 多个表使用的相同序列 正在回滚的事务 任何指向解决此问题的正确方向的指针都将受到赞赏 您的主要错误是将此视为一个问题。在生成的序列中出现间隙是完全正常的。如果数据库崩溃并重新启动,将按顺序出现一个间隙。如果事务在分配ID后
这是什么原因造成的?任何指向解决此问题的正确方向的指针都是值得赞赏的。谢谢这些评论充分说明了可能的原因:
- 多个
调用,比如一个nextval
调用和一个explicit调用李>default
- 多个表使用的相同序列
- 正在回滚的事务
有关详细信息以及如果您需要真正无间隙序列的提示,请参阅。注释充分涵盖了可能的原因:
- 多个
调用,比如一个nextval
调用和一个explicit调用李>default
- 多个表使用的相同序列
- 正在回滚的事务
有关详细信息和提示,如果您需要真正的无间隙序列,请参见。添加到Craig的观点中,我认为您会发现一个关键的罪魁祸首是
也规则
将新的.id插入另一个表中。这将导致双增量,因为规则
重写查询,因此new.id最终将成为“我们上次计算new.id所做的一切”(这意味着再次递增序列)
如果它是一致的,IMO最有可能的原因是有人在没有完全理解gotchas的情况下创建了DO-Always规则。除了Craig的观点之外,我想你会发现一个关键的罪魁祸首是一个DO-Always
规则
将新的.id插入另一个表中。这将导致双增量,因为规则
重写查询,因此new.id最终将成为“我们上次计算new.id所做的一切”(这意味着再次递增序列)
如果是一致的,IMO最有可能的原因是有人在没有完全理解问题的情况下创建了DO ALLOS规则。我打赌您是在某处(一致地)回滚一个insert,或者您为每个insert调用了两次nextval(),该列可以设置为自动递增2。您能为正在使用的序列提供CREATE SEQUENCE…
吗?另一种(远程)可能性-相同的序列用于两个同时需要插入的表。我只是好奇-为什么这是一个问题?您不可能用完偶数。我打赌您是在某处(一致地)回滚一个insert,或者您为每个insert调用了两次nextval()
。查看数据库表设置,该列可能设置为自动递增2。您是否可以为正在使用的序列提供CREATE SEQUENCE…
(远程)可能性-相同的序列用于两个同时需要插入的表。我只是好奇-为什么这是一个问题?您不可能用完偶数。
1258930
1258932
1258934
1258936