Conceito e mecanismo
MVCC permite que consultas observem versões de linhas coerentes com a sua snapshot. Em Read Committed, comandos sucessivos podem ver commits diferentes; BEGIN não fixa uma única visão para toda a transação. Serializable acrescenta garantias, mas a aplicação deve tratar serialization failures, como 40001, repetindo a transação completa com leituras novas. Deadlock é uma dependência circular e pode surgir quando operações obtêm locks em ordem inversa. O erro 40P01 exige tratar a vítima; uma ordem consistente de acesso reduz recorrência. Não confundir uma fila longa de esperas com prova de deadlock. Recolhe transação, aplicação e cadeia de dependências para sustentar o diagnóstico.
Aplicação guiada
Num fecho fictício, dezenas de sessões podem estar bloqueadas por uma transação idle in transaction que o cliente esqueceu de terminar. Identifica owner e efeitos antes de cancelar ou terminar a sessão. pg_cancel_backend cancela o comando; pg_terminate_backend termina a sessão. Nenhuma função demonstra por si só que o serviço recuperou. Os limites statement_timeout, lock_timeout e idle_in_transaction_session_timeout controlam situações diferentes e precisam de compatibilidade com o pool. Após intervenção, confirma rollback ou commit observado, locks libertados e processamento do batch. Retries devem ser limitados e os efeitos externos protegidos contra repetição, especialmente quando uma resposta ao cliente se perde depois de um commit.
40001 pede nova tentativa transacional; 40P01 pede análise do ciclo e retry da vítima. A decisão inclui os efeitos fora da base.
Armadilhas comuns
Retry apenas do último comando; timeout como prova de rollback; matar todas as sessões em espera.
Tópicos relacionados: Ligações, identidades e privilégios · Planos, índices e memória · Vacuum, configuração e capacidade
Atua sobre a causa observada e valida a recuperação do serviço.
Referência: MVCC and transaction isolation · PostgreSQL 18 reference semantics;18.6 current stable at review