2017-01-05 1 views
0

내가 PostgreSQL의 9.5.2 서버를 실행하는거야, 나는 가끔 같은 메시지를보고 있어요 : 그것은 교착 상태의 원인 행이나 열에 대한 정보가 포함 된 경우postgresql 교착 상태 메시지는 어떻게 해석합니까?

ERROR: deadlock detected
Detail: Process 1234 waits for ShareLock on transaction 3042999324; blocked by process 5678.
Process 5678 waits for ShareLock on transaction 3042999328; blocked by process 1234.
Hint: See server log for query details.
Where: while locking tuple (5389,30) in relation "asset"

, 그것은 나에게 디버그 도움이 될 것입니다 첫 번째 장소에서 오류를 일으키는 큰 추악한 common-table expression.

답변

0

튜토리얼은 행의 ctid, 문제의 행 버전의 물리적 위치를 나타내는 모든 행의 시스템 열을 나타냅니다. (행이 업데이트되면, PostgreSQL은 ACID 보증을 이행하기 위해 잠시 동안 이전 버전을 유지합니다.)

당신은 단순히으로 데이터를 선택할 수 있습니다 : 당신이 너무 오래 기다려야하는 경우,

SELECT * from "asset" where ctid = '(5389,30)'; 

그러나 (내가했던 것처럼) autovacuum 작업은 더 이상 사용되지 않는 행의 해당 버전을 정리할 수 있습니다.