> 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

Responder a