在Postgres中手动对列进行排序的正确方法是什么?

在Postgres中手动对列进行排序的正确方法是什么?,第1张

在Postgres中手动对列进行排序的正确方法是什么?

我认为没有解决此问题的“廉价”解决方案。在多用户环境中唯一安全(但不一定快速)的解决方案是拥有一个“计数器”表,每个客户一行。

每笔交易都必须先锁定客户的条目,然后再插入票证,如下所示:

UPDATE cust_numbers  SET current_number = current_number + 1WHERe cust_id = 42RETURNING current_number;

一步就能完成三件事

  1. 增加该客户的当前“顺序”号
  2. 锁定该行,因此执行相同 *** 作的其他事务将不得不等待锁定
  3. 返回该列的新值。

使用该新号码,您现在可以插入新票证。如果提交了事务,它还将释放对

cust_numbers
表的锁定,因此其他“等待号码”的事务可以继续进行。

您可以将两个步骤(更新..返回和插入)包装到单个存储的函数中,以便集中进行此 *** 作后的逻辑。您的应用程序只会在

selectinsert_ticket(...)
不知道票证号码如何生成的情况下进行调用。

您可能还想在客户表上创建一个触发器,以便在创建

cust_numbers
新客户时自动在表中插入一行。

这样做的缺点是,您可以有效地序列化为同一客户插入新票证的交易。根据系统中插入内容的数量,这可能会成为性能问题。

编辑这样做的
另一个缺点是,您不会 被迫 以这种方式插入票证,如果新开发者忘记了此票证,可能会导致问题。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5675188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存