> Não é a trigger que causa nada, é um lock normal. Você fez um update na > primeira transação, isso bloqueia a linha para outras alterações. O bloqueio > só é liberado no commit. Isso é parte do que chamamos de ACID - a primeira > letra, atomicidade, uma operação é válida no momento de sua confirmação > (commit) imediatamente, sendo que a letra I - independência, obriga que uma > transação náo interfira na outra, logo, a segunda transação vai esperar a > primeira terminar para que possa modificar a mesma linha.
Flavio, acho que você não entendeu certo. Vou ser mais direto... Passo 1: insert into tb_produtoESTOQUEHISTORICO - Dispara uma trigger. Passo 2: update tb_produtoESTOQUE set qt_estoque = qt_estoque + (um select na tabela anterior que recebeu o insert - tb_produtoESTOQUEHISTORICO) - Aqui temos um sub select, sem ele o update não fica bloqueado (óbvio). Passo 1 e 2 isolados por transação, cada um a sua.... Testei com outros bancos de dados esse bloqueio não ocorreu. Reforço a tese de que não é normal esse bloqueio: - Se desabilitar a trigger não bloqueia o update; - Se eu comentar todo o conteúdo da trigger ele mantem o bloqueio; - Simulando essa situação em outro banco de dados esse problema não ocorreu O nível de isolamento utilizado na transação read committed. _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
