我的应用程序测试对数据库非常困难.它们运行create,drop和alter table语句.但是,我仍然期望postresql即使在死锁的情况下也能处理这些问题(即检测锁定并将一个线程删除).我也没有同时运行请求.
但是,在我的情况下,它只是冻结,我必须手动杀死它们(如果我稍微改变运行的顺序,它可以工作,但这不会给我信心).锁表明create table语句有一个独占锁,一个事务也有一个.
有没有人经历过类似的事?有没有可以提供帮助的服务器设置?或者只是任何建议?
解决方法
PostgreSQL自动检测死锁.最有可能的是,你只是在一些尚未完成的声明中阻止.仅当两个语句相互等待时才会发生死锁.
如果你检查你的“锁树”到根(d阻塞b阻塞在a上有一个根),你很可能会在某个地方找到一个需要很长时间才能运行的事务,或者没有正确提交的事务但只是处于“闲置交易”模式.
既然你提到了线程 – 请注意,所有客户端库在客户端都不一定是线程安全的.