想象一下以下场景,我们有一个表,其中行插入了一些约束。 例如,
如果我们没有很多并发查询,它就可以工作了。 对于句柄并发请求,有以下几种方法:
我正在使用PostgreSQL。解决这种情况的最佳方法是什么?
答案 0 :(得分:0)
请尝试每个用户会话明确地statement_timeout
和lock_timeout
set
。查看here了解详情。
答案 1 :(得分:0)
锁定表格非常极端,会严重损害并发性。
在另一张桌子上维护一个柜台会更好;它本质上会序列化INSERT
s(下一个事务只能在前一个事务释放锁定COMMIT
后才更新计数器)。
第三种方法是使用SERIALIZABLE
次交易。如果所涉及的所有交易均为SERIALIZABLE
,只要您在单笔交易中执行SELECT count(*) ...
和INSERT
,您的条件就会自动得到保证。
缺点是事务可能会因序列化错误而中止,您必须准备好重试它们。