Este comando define o nível de isolamento da transação. O comando SET TRANSACTION define as características para a transação SQL corrente, não possuindo qualquer efeito sobre nenhuma transação seguinte. Este comando não pode ser utilizado após a primeira consulta ou instrução que modifique os dados (SELECT, INSERT, DELETE, UPDATE, FETCH, COPY) da transação tiver sido executada. O comando SET SESSION CHARACTERISTICS define o nível de isolamento padrão para todas as transações da sessão. O comando SET TRANSACTION pode substitui-lo para uma transação individual.
O nível de isolamento de uma transação determina quais dados a transação pode enxergar quando outras transações estão processando ao mesmo tempo.
Um comando enxerga apenas as linhas efetivadas (commit) antes do início da sua execução. Este é o padrão.
A transação corrente enxerga apenas as linhas efetivadas (commit) antes da primeira consulta ou instrução que modifique os dados ter sido executada nesta transação.
Tip: Intuitivamente serializável significa que, duas transações concorrentes deixam o banco de dados no mesmo estado que estas duas transações, executadas uma após a outra em qualquer ordem, deixaria.
O nível de isolamento padrão da transação também pode ser definido pelo comando
SET default_transaction_isolation = 'valor'
no arquivo de configuração. Consulte o Guia do Administrador para obter mais informações.
SERIALIZABLE é o nível de isolamento padrão do SQL. O PostgreSQL não possui os níveis de isolamento READ UNCOMMITTED e REPEATABLE READ. Devido ao controle de concorrência multi-versão, o nível serializável não é verdadeiramente serializável. Consulte o Guia do Usuário para obter mais informações.
No SQL existem outras duas características da transação que podem ser definidas com este comando: se a transação é de leitura apenas e o tamanho da área de diagnósticos. Nenhum destes conceitos é suportado pelo PostgreSQL.