gpt4 book ai didi

postgresql - 通过提交顺序保证 PostgreSQL 串行列值的单调性

转载 作者:行者123 更新时间:2023-11-29 11:25:20 24 4
gpt4 key购买 nike

我的团队需要一个序列列来随着每次提交单调增加。

有些情况下,两个事务从序列中获取值 100101,然后 100 事务需要更长的时间来提交,所以值 101 首先被提交,然后是 100。这种情况对我们的需求来说是有问题的,我们需要解决。

这正是 this question. 描述的问题我们需要一个不需要更改数据库配置的解决方案,这与该问题的公认答案不同。

A comment on that solution ,以及 this post ,建议在获取值之前开始使用独占事务咨询锁。

有没有一种方法可以让 Postgres 在向相关表获取 INSERT 时自动获取此锁并从序列中获取值?

注意: promise 值中的差距是可以接受的并且是预期的。

编辑:我已经深入研究了这个问题,可以很好地提出这个问题,但我对 Postgres 的经验并不丰富。我希望有一个指向特定触发器或任何特定 PG 设置的指针将完成此操作。

最佳答案

我知道你想要一个自动锁定,我会反对,你可以使用存储过程或触发器,但除了代码之外还有什么是存储过程。另请参阅我的评论。

我的解决方案是:

我的团队需要一个序列列,以便在每次提交时单调增加。

这是否意味着,

  • 不允许插入小于已存储的最大值的值?
  • 该列的值不允许有差距

我假设您使用一个序列来创建这个值。然后在提交之前,您应该立即获得一个特定的咨询锁 see 13.3.4现在你的插入要么在你的模式中隐式地使用序列,要么通过在你的插入中查询来显式地使用。尝试获取相同锁的事务的其他提交不能在锁定和提交之间进行,因此插入必须是顺序的。在事务结束时进行锁定和递增有助于保持时间短并防止死锁。锁会随着commit一起释放,下一个事务可能会获取它,并会得到序列的下一个值。

关于postgresql - 通过提交顺序保证 PostgreSQL 串行列值的单调性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45866187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com