4

我的应用程序测试在数据库上非常困难。它们运行创建、删除和更改表语句。但是,即使在死锁的情况下,我仍然希望 postresql 能够处理这些问题(即检测锁并抛出一个线程)。我也没有同时运行请求。

但是,在我的情况下,它只是冻结了,我必须手动手动杀死它们(如果我稍微改变运行顺序,它会起作用,但这并不能给我信心)。锁表明 create table 语句具有排他锁,事务也具有排他锁。

有没有人经历过类似的事情?是否有任何服务器设置可以提供帮助?或者只是任何建议?

4

1 回答 1

8

PostgreSQL 自动检测死锁。最有可能的是,您只是在某个尚未完成的地方阻塞了一些语句。仅当两条语句相互等待时才会发生死锁。

如果您检查您的“锁定树”直至根(d 阻塞 b 阻塞 a 的根有 a),您很可能会在某处找到一个需要很长时间才能运行或未正确提交的事务但只是处于“空闲事务”模式。

既然您提到了线程 - 请注意,所有客户端库不一定在客户端都是线程安全的。

于 2009-07-20T14:51:47.987 回答