我有一个包含id
、name
和stock
的product
表,如下所示。
product
表格:
| 身份证|姓名|股票|
| - ------| - ------| - ------|
| 1个|苹果|十个|
| 第二章|橙色|二十个|
然后,在T1运行SELECT FOR UPDATE
之后,T2需要等待T1提交很长时间才能运行SELECT FOR UPDATE
,如下所示,因为SELECT FOR UPDATE
在默认情况下没有超时:
| 流量|交易1(T1)|交易2(T2)|解释|
| - ------| - ------| - ------| - ------|
| 第一步|BEGIN;
| |T1启动。|
| 第二步||BEGIN;
|T2启动。|
| 第三步|x1米10英寸1x二十个||通过"选择更新",T1读取20
。|
| 第四步||SELECT stock FROM product WHERE id = 2 FOR UPDATE;
|T2需要等待T1提交以使用"SELECT FOR UPDATE"读取stock
。|
| 第五步||等待...|...|
| 第六步||等待...|...|
| 一步...||等待...|...|
| 一步...||等待...|...|
| 一步...||等待...|...|
| 第九十八步|COMMIT;
|等待...| T1提交。|
| 第九十九步||SELECT stock FROM product WHERE id = 2 FOR UPDATE;
二十个|现在使用"选择更新",T2读取20
|
| 第一百步||COMMIT;
|T2提交。|
现在,我希望T2在等待T1 3秒后回滚,如下所示:
| 流量|交易1(T1)|交易2(T2)|解释|
| - ------| - ------| - ------| - ------|
| 第一步|BEGIN;
| |T1启动。|
| 第二步||BEGIN;
|T2启动。|
| 第三步|x1米20英寸1x二十个||通过"选择更新",T1读取20
。|
| 第四步||SELECT stock FROM product WHERE id = 2 FOR UPDATE;
|T2需要等待T1提交以使用"SELECT FOR UPDATE"读取stock
。|
| 第五步||等待...|...|
| 第六步||等待...|...|
| 第七步||回滚;|T2在等待T1 3秒后回滚。|
| 一步...||||
| 一步...||||
| 第九十八步||||
| 第九十九步||||
| 第一百步|COMMIT;
| |T1提交。|
那么,如何在PostgreSQL中为SELECT FOR UPDATE
设置3秒的事务超时呢?
1条答案
按热度按时间2izufjch1#
看看这个答案:https://stackoverflow.com/a/20963803/8963723