Pie*_*ana 3 postgresql index sequence functions
观察:我在 PostgreSQL 实例中的一个表上有一个串行索引,并且我执行了一个将新记录插入到该表中的函数。函数失败(原因不重要),事务被回滚......但索引增加并且没有回滚。这会导致未使用的序列值,例如具有索引 1、2、4、5、7 等且没有删除的表。
问题:有什么办法可以回收丢失的序列值,或者防止失败的函数增加索引?
我知道有其他方法可以缓解这个潜在问题,但我仍然很好奇。
这导致未使用的序列值
这是完全正常的,而且是设计使然。这也不是获得此类差距的唯一方法。请参阅手册中的注释nextval
。
有什么办法可以回收丢失的序列值
不。
或防止失败的函数增加序列?
不要使用SEQUENCE
. 相反,如果您必须具有无缝值,请通过 使用 ID 生成表UPDATE ... RETURNING
。有关更多信息,请参阅无缝序列。
请注意,不可能在没有间隙的情况下进行并发插入。你得到一个或另一个。所以仔细想想你是否真的需要gapless。
对于大多数应用程序,您应该只使用SEQUENCE
( SERIAL
) 并针对间隙是可能且正常的事实进行设计。