Acabei de descobrir que o H2 não oferece suporte a conexões simultâneas usando diferentes níveis de isolamento de transação . Ou seja, alterar o isolamento da transação de uma conexão afeta todas as outras conexões.
O Postgresql suporta o uso de diferentes níveis de isolamento para cada conexão?
Sim, suporta diferentes níveis de isolamento de transação por conexão. Você pode definir o nível de isolamento da transação (bem como o status somente leitura e adiável para transações) para uma conexão com
SET SESSION CHARACTERISTICS
:Você pode substituir por transação com
SET TRANSACTION ISOLATION LEVEL
, ou ao iniciar uma transação comBEGIN TRANSACTION ISOLATION LEVEL
:O padrão é definido com o
default_transaction_isolation
parâmetro:Veja os documentos em http://www.postgresql.org/docs/current/static/sql-set-transaction.html
O nível de isolamento da transação é configurado por transação. Mesmo uma conexão pode ter diferentes níveis de isolamento em cada transação.
É claro que conexões diferentes podem ter diferentes níveis de isolamento.
Aqui estão alguns testes:
Ao mesmo tempo em outra sessão:
Depois de confirmar uma transação e iniciar outra nova transação, o nível de isolamento padrão será usado, definido em postgresql.conf:
Eu tento isso no Postgres 9.1.
Espero ter ajudado, abração.