当前位置: 首页 > 知识库问答 >
问题:

主键值未正确递增

沈琨
2023-03-14

我有一个django模型,它的id开始奇怪地增加。

列的后缀定义(从詹戈模型生成):

id | integer | not null default nextval('billing_invoice_id_seq'::regclass)

tpg=> SELECT MAX(id) FROM billing_invoice;
  max  
-------
 16260

然后我通过django管理员创建了一个新记录:

tpg=> SELECT MAX(id) FROM billing_invoice;
  max  
-------
 17223

tpg=> SELECT nextval('billing_invoice_id_seq');
 nextval 
---------
   17224

然后我创建了一个新记录,它跳过了值17224,并插入了主键17225:

tpg=> SELECT nextval('billing_invoice_id_seq');
 nextval 
---------
   17226

有人知道为什么会发生这种情况吗?应用程序此时并不关心,因为id仍在增加,但是在过去的几个新对象中,PKs已经从427跳过-

共有1个答案

颛孙星海
2023-03-14

从序列中获取默认值的串行列永远不能保证是无缝的。它们被保证是惟一的、升序的(如定义的那样),并且对于并发使用是安全的。< br >如果从序列中抽取了一个号码的事务被回滚,该号码将被烧录,不再使用...根据文件:

注意:由于小序列串行大序列是使用序列实现的,因此即使没有删除任何行,列中显示的值序列中也可能存在“孔”或间隙。从序列中分配的值仍会“用完”,即使包含该值的行从未成功插入到表列中也是如此。例如,如果插入事务回滚,则可能会发生这种情况。有关详细信息,请参见第 9.16 节中的下一个val()

如果您看到像< code>427 -这样的大间隙

典型的候选项是循环出错或从未提交的事务。

 类似资料:
  • 我正在尝试使用useReducer更新组件的状态。我在useEffect中从mongodb获取了一些信息,在那里我调用了我的useReducer dispatch,以便在组件装载后立即设置我的状态。不幸的是,我的状态没有受到影响,我的UI也没有改变。控制台。useffect语句末尾的log语句显示我的状态仍然具有useReducer调用中设置的初始值。有人能告诉我哪里出了问题吗?另外,我计划稍后在

  • 我已经设置了一个谷歌工作表,它附带了一个脚本,运行一个函数来提取chromebook设备信息,除了我感兴趣的两个字段,“cpuStatusReports”和“diskVolumeReports”之外,效果非常好。脚本记录器确实显示了正确的信息,但我的工作表单元格值设置为例如 {cpuUtilizationPercentageInfo=[Ljava.lang.Object;@d151552,cpuT

  • 我曾试图获得选定的下拉值基于一些其他输入类型的文本字段使用下面的代码。然而,每次它获得第一个值,即,即使我选择了另一个。 这里我选择第二个选项,即b,但它显示警报15,但b的实际值是16

  • 问题内容: 这是我正在使用的密集设置的过度简化。并且都具有自动增量代理主键作为ID。是包含有关和的信息的表。 我试图决定,如果我应该做的主键的复合ID的距离和。如果我要这样做,哪一个最有意义? (在此示例中,我将ID 11209与ID 437组合在一起) 11209437 (我可以想象为什么这很糟糕) 11209-437 11209.437 或者是其他东西? 将其用作MYSQL MYISAM DB

  • 我更新了我的尝试,将一些内容保留为CHAR,但仍然得到一个类似的错误:第1行错误:ORA-02091:事务回滚ORA-02291:违反完整性约束(MMM1339.ITEMNO_PHAR_FK)-未找到父密钥 需求的外键都在不同的供应主键中有值,所以我不确定为什么仍然存在问题。

  • 我的程序显示一行水平滑动的按钮,其中包含艺术作品的文字描述。单击按钮时,ImageActivity启动以显示相应的艺术品。但是,当我点击任何文本按钮时,它总是显示数组中最后一幅画。 我试图将int ID传递给第二个活动,以便一旦单击相应的描述,它将显示正确的绘画。 非常感谢。 以下是我的主要活动: 我正在尝试将整数ID传递给: } 还有绘画数据库,我要从那里获取身份: