Você pode fazer isso usando um
LOCK
em uma tabela, configurando suas transações e liberando o bloqueio revertendo a transação que obteve o bloqueio. Veja esta resposta anterior
e seus links para detalhes sobre esta abordagem. Enquanto eu demonstrava usando três psql
sessões é igualmente viável fazê-lo com co-processos bash, um script Python usando psycopg2
e o multiprocessamento
ou threading
módulos, etc. Bastante simples de fazer. Atualizar :Na verdade aqui está um exemplo que acabei de escrever em python3 . Para testes mais sofisticados, pegue o código fonte do PostgreSQL e use a ferramenta "isolationtester" em
src/test/isolation
que permite escrever receitas que fazem ordenações complexas de comandos. Não suporta ser construído com PGXS
(apesar de que tal suporte provavelmente seria bem trivial para adicionar) então você tem que compilar toda a árvore fonte do PostgreSQL, mas isso é rápido o suficiente. Ele será executado em seu PostgreSQL existente, portanto, não há necessidade de instalar o que você compilou. Consulte
src/test/isolation/README
para obter mais informações sobre a ferramenta de teste de isolamento. Os documentos são um pouco escassos, pois é uma ferramenta de teste interna, mas os casos de teste existentes devem ajudá-lo a começar. Sinta-se à vontade para melhorá-lo para atender às suas necessidades e enviar patches :)