独占锁 a table 用于多个查询

Exclusive lock a table for more than one query

我正在开发一个应用程序,我们必须确保只将有限数量的行插入 table。我们正在使用 postgresql.

它适用于只有有限的 seet 可用的票务系统,当用户要求 seet 时,我首先必须 SELECT 以确保还有一个 seet 可用,如果是这样,我必须 INSERT 进入这个 table 以“保留” seet。

但是,如果在 SELECTINSERT 语句之间插入另一个语句到同一个 table 怎么办?

我读过 LOCKING 但一次只找到一个语句的示例,而不是关于在多个语句之间锁定的示例。

我的问题是:

  1. 如何为多个语句锁定 table?或者:防止错误数据的最佳策略是什么?
  2. 如果一个用户锁定了 table,另一个用户的进程会等待另一个进程完成还是会失败?
  3. 如果我完全错了,那么解决这类问题的正确方法是什么?

我根本不会锁定 table,不需要。我认为。当我有 500 张票时,我会创建 500 条记录(票)。当有人购买多张票时,您必须将这些票更新为已售出。结合使用 SELECT FOR UPDATE 语句和 SKIP LOCKED 来获取您需要的票证数量,然后更新这些选定的记录。多个客户可以同时购票,没有问题。

剩下的唯一一件事就是当你没有 10 张票时有人想买 10 张票时该怎么办。