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

顺序增量跳过数

南宫凯康
2023-03-14
ID | info
---------
1  | xxx
2  | xxx
4  | xxx

我在PostgreSQL中有类似的设置。(如果有区别的话,我使用的是运行Mojave的mac)。

我还有几个专栏,但问题是ID专栏。这被设置为连续的,所以使用Express我将其插入到DB中。

问题是,即使插入失败,它也会在每次插入时增加ID<代码>信息定义为唯一的,因此尝试插入现有的信息会返回错误。但是ID仍然是递增的。

例如,如果插入2行,则id为1

我是否可以设置Postgres,使其不会在失败的插入上递增?

共有1个答案

程昕
2023-03-14

在Postgres 10或更高版本中,序列列或身份列从序列中提取数字,并且预计会出现间隔。他们的工作是使用唯一的数字实现并发写访问,而不一定是间距较小的数字。

如果您实际上没有并发写访问权限,那么有一些简单的方法可以实现(大多数情况下)更少的间隙数。例如:

INSERT INTO tbl (info) 
SELECT 'xxx'
WHERE NOT EXISTS (SELECT FROM tbl WHERE info = 'xxx');

这不会从序列中刻录序列ID,因为会跳过重复插入。(插入操作仍可能因任何其他原因而失败,并烧录序列号。在这种情况下,您可以重置序列:

  • 当postgres的主键序列不同步时如何重置它?

在一条语句中插入多行时,还必须排除插入集中的重复行。示例代码:

  • 从公共表表达式的INSERT中使用的subselect返回数据

但是,如果您确实有并发写操作,原则上上述操作都不能可靠地工作。您最好学会接受ID中的间隙。您总是可以在(按id排序)上使用row\u number()进行查询,以在事实发生后生成间隙较小的数字。然而,这些数字在一定程度上仍然是任意的。较小的数字不一定更早promise。并发写加载下存在异常。相关:

  • 主键值未正确递增

或者考虑使用UUID(dat类型UUID),避免在巨大的密钥空间中使用随机值进行重复的固有问题。但根本不是序列号:

  • 在Postgres中为Insert语句生成UUID

 类似资料:
  • 我知道后缀/前缀递增/递减运算符是做什么的。在javascript中,这似乎没有什么不同。 虽然我可以很容易地猜出这一行的结果: 当运算符出现在单独的表达式中时。 由于这些运算符出现在同一个表达式中,因此变得有点复杂: 我的问题是,Javascript(在本例中为V8,我在Chrome中测试了它们)如何以不同的方式计算第二个和第三个示例中的加法表达式? 为什么的评估结果与不同。后缀不是应该在表达式

  • The order in which request variables are registered, similar to variables_order in php.ini 请求变量的顺序在这里配置,类似于php.ini中的变量顺序.

  • 本文向大家介绍如何在Python中使用Tensorflow增量创建顺序模型?,包括了如何在Python中使用Tensorflow增量创建顺序模型?的使用技巧和注意事项,需要的朋友参考一下 当存在简单的层堆栈时,顺序模型才有意义。在此堆栈中,每一层都只有一个输入张量和一个输出张量。当模型具有多个输入或多个输出时,这是不合适的。当需要共享图层时,这是不合适的。当图层具有多个输入或多个输出时,这是不合适

  • const SKIP_NONE = 0x00; // 不忽略任何单元格、行 const SKIP_EMPTY_ROW = 0x01; // 忽略空行 const SKIP_EMPTY_CELLS = 0x02; // 忽略空单元格(肉眼观察单元格内无数据,并不代表单元格未定义、未使用) const SKIP_EMPTY_VALUE = 0X100; // 忽略单元格空数据

  • 下表(按字母排序)列出了 Microsoft Office 中已有对象添加的属性。属性AllowMultiSelectAttachCertificateButtonNameColumnColumnsCommandBarsCompareToComparisonConjunctionConnectStringDataSourceDialogTypeDisableAskAQuestionDropdown

  • 我想为VRP创建一个过度约束规划的增量分数。我创建了一个传统的虚拟车辆,其中包括所有计划外的客户。 示例: Optaplanner将Customer1从Vehicle1移动到Vehicle2: 当我得到AfterVariableChanged:previousStandstill(Customer1)时,在Customer.getVehicle()中,我有旧车辆的价值,我不知道是否需要添加软成本(