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

Heroku Postgres上自动递增ID的差距

丰佐
2023-03-14

我有一个Ruby网络应用程序在赫洛库上运行,有一个Postgres数据库。我注意到自动递增的ID在Postgres数据库被Heroku“维护”时有一个间隙。

差距是一次性的,然后ID再次增加1。像这样:

ID   |                 Created at |
2959 | 2016-02-14 21:07:05.149797 |
2960 | 2016-02-14 21:15:05.03284  |
2961 | 2016-02-14 22:59:19.634962 |
2994 | 2016-02-15 09:25:30.969881 |
2995 | 2016-02-15 09:44:38.49678  |
2996 | 2016-02-15 09:51:00.282624 |

Heroku的维护发生在两个记录(29612994)之间,于2016-02-15 04:00:00创建。

我看到了一个解释,即失败的事务将导致下一次成功提交时跳过一个ID,但我在应用程序日志中看不到任何指示当时正在创建任何记录的内容。

共有2个答案

公羊玉泽
2023-03-14

如果您的问题是在这段时间内记录是否丢失,那么需要代码和日志审计来找出1。这是如何可能发生的。是否真的发生了。

如果你的问题是为什么会发生这种情况,或者是否应该发生…这取决于PostgreSQL和Heroku的实现。

怀洛华
2023-03-14

在这里看到heroku的答案,以及更多关于为什么会在这里发生这种情况。

 类似资料:
  • 问题内容: 我有一个使用hibernate和注解的j2ee应用程序。我如何注释我的pojo类中的Id字段以将其设置为自动增量或自动生成。在添加bean时,我是否将该字段留在bean中为null? 问题答案: 并在保留时将其保留为。(如果使用包装器) 在某些情况下,该策略被解析为或,因此你可能需要手动将其设置为(取决于基础数据库)。 似乎+ 指定序列名称对你有用。

  • 问题内容: 我有一个使用hibernate和注解的j2ee应用程序。我如何注释我的pojo类中的Id字段以将其设置为自动增量或自动生成。在添加bean时,我是否将该字段留在bean中为null? 问题答案: 并在保留时将其保留为()。(如果使用/ 包装器) 在某些情况下,该策略被解析为to 或to ,因此您可能需要手动将其设置为or (取决于基础数据库)。 似乎 + 指定序列名称 对您有用。

  • 问题内容: 我们希望从mySQL获取一个自动递增的ID,而无需实际存储它,直到其他与mysql不相关的进程成功完成为止,这样,如果发生异常或应用程序崩溃,就不会存储该条目。我们需要使用ID作为其他进程的密钥。本质上,我们要“保留”自动增量,并将最后一行插入到mySQL中。我们不希望在知道整个过程成功完成之前插入任何行。 可以在mySQL中进行这种自动增量保留吗? 注意:我了解SQL事务。但是,我们

  • 问题内容: 因此,我只是站了一个Spring Hibernate应用程序,似乎无法正确映射文件。我正在使用MySql 5和一个自动递增键。这是我的映射文件的ID部分。 这是生成的SQL 插入联系人(标题,名字,中间名,姓,后缀,职务,职位,护照号码,护照过期,雇主,饮食限制,secondary_contact_fname,secondary_contact_lname,secondary_cont

  • 这就是我所拥有的 当程序运行时,会出现一个添加新类别的屏幕,用户必须写入类别的名称和描述,但ID应该是自动的,并且应该在每次用户输入新类别时增加ID。我这样做并没有达到预期效果,它只增加了一次,但由于初始值保持在5,所以它总是6。

  • 问题内容: 我的架构看起来像这样: 我已经在同一数据库中创建了counters集合,并添加了一个带有’entityId’的_id的页面。从这里我不确定如何使用猫鼬来更新该页面并获取递增编号。 没有计数器的架构,我希望它保持这种状态,因为这实际上不是应用程序使用的实体。仅应在模式中使用它来自动递增字段。 问题答案: 这是一个示例,如何在Mongoose中实现自动增量字段: