所以我在一些更新语句中发现了一个死锁,但我不明白为什么他们互相阻塞。以下是postgresql日志文件中的错误:
2014-09-29 13:49:34 CEST DETAIL: Process 1920 waits for ShareLock on transaction 318238; blocked by process 1819.
Process 1819 waits for ShareLock on tuple (0,35) of relation 52097 of database 16384; blocked by process 31215.
Process 31215 waits for ShareLock on transaction 318218; blocked by process 1920.
Process 1920: UPDATE teamformation SET captain=58583 WHERE teamformation.id = 668113
Process 1819: UPDATE team SET money=17920000 WHERE team.id = 141504
Process 31215: UPDATE league SET time='2014-09-29T13:48:28.931355+02:00'::timestamptz WHERE league.id = 70
在这里简要解释我的三个表格。 league
表有多个team
,团队表有多个teamformation
。我有一个后台工作,经常在time
上设置league
属性。
因此,带有668113的teamformation
具有ID为141504的team
的外键,并且该团队具有ID为70的league
的外键。
我不能得到的是为什么这些相互阻挡。他们没有更新任何冲突的数据,所以应该能够同时进行。
我的数据库设置中有什么可能导致此问题?