Deadlock erkannt in PL/pgSQL-Funktion

Ich bin vor ein deadlock-problem aus einer PL/pgSQL-Funktion in meiner PostgreSQL-Datenbank. Finden Sie die SQL-Anweisung im code-block (nur Beispiel):

BEGIN
UPDATE accounts SET balance = 0 WHERE acct_name like 'A%';
UPDATE accounts SET balance = balance + 100 WHERE acct_name like '%A';
EXCEPTION WHEN OTHERS THEN RAISE NOTICE SQLERRM;
END;

Habe ich herausgefunden, dass der deadlock aufgetreten ist, während diese Anweisung ausgeführt wurde. Aber ich bin mir nicht sicher, dass es noch andere Aussagen zu aktualisieren versuchen diese Tabelle in der gleichen Zeit (weil ich nicht finden in meinen logging-system).

So, ist es möglich, dass der deadlock innerhalb dieser Aussage? Soweit ich weiß, wenn wir blockiert ganze Erklärung mit BEGIN/END. Es werden die gleichen Transaktion und sollte nicht gesperrt werden, von selbst.

  • Sie haben alle Trigger, die auf Konten? Auch die explizite sperren?
  • Standardmäßig wird eine Transaktion kann das beobachten der änderungen commit von anderen Transaktionen ausgeführt. Weitere Informationen finden Sie unter Transaction Isolation aus der PostgreSQL-Dokumentation.
  • Ja habe ich, aber-Anweisung in diesem trigger ist nicht mit dieser Tabelle. Für die expliziten sperren ja auch.
Schreibe einen Kommentar