The PostgreSQL administration field guideField notes · Runbooks · Free certification

Section 3 of 3 · 7 minutes

Prevent repeat deadlocks

Your goal

What you will be able to do

Explain a deadlock cycle and prevent it with consistent lock ordering and short transactions.

Why this matters at work

The practical reason

PostgreSQL resolves a deadlock by aborting a transaction, but the application problem can continue recurring.

Learn

The idea in plain English

A deadlock occurs when transactions wait on each other in a cycle. PostgreSQL detects the cycle and cancels one transaction so the others can continue.

Use the server log to identify the statements and objects in the cycle. Applications should lock shared resources in the same order, keep transactions short, and retry aborted work only when it is safe and idempotent.

Remember these points

  • A deadlock is a cycle, not merely a long wait.
  • PostgreSQL aborts one participant to break the cycle.
  • Consistent lock order prevents many recurring deadlocks.

See it in SQL

Read the deadlock detection setting

Record how long PostgreSQL waits before checking for a deadlock.

SELECT
  name,
  setting,
  unit,
  context
FROM pg_settings
WHERE name = 'deadlock_timeout';

`deadlock_timeout` controls when PostgreSQL checks a lock wait for a cycle. It is not a general query timeout.

Changing it is rarely the root fix. Correct the transaction access order and retry behaviour instead.

What you should see

The current deadlock detection delay, its unit, and the configuration context required to change it.

Useful words

Important terms

Deadlock
A cycle in which transactions each wait for a lock held by another participant.
Idempotent retry
A retry that can run again without applying the same business effect twice.

Quick check · Not graded

Check your understanding

What is the best long-term response to a recurring deadlock?

Choose one answer

Your progress is saved to your signed-in account.