SET TRANSACTION

Nome

SET TRANSACTION -- define as características da transação corrente

Sinopse

SET TRANSACTION
    [ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ] [ READ WRITE | READ ONLY ]
SET SESSION CHARACTERISTICS AS TRANSACTION
    [ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ] [ READ WRITE | READ ONLY ]

Descrição

O comando SET TRANSACTION define as características da transação corrente. Não produz nenhum efeito para as transações subseqüentes. O comando SET SESSION CHARACTERISTICS define o padrão das características das transações para as próximas transações na sessão. Estes padrões podem ser mudados pelo comando SET TRANSACTION para uma transação individual.

As características de transação disponíveis são o nível de isolamento da transação e o modo de acesso da transação (ler/escrever ou somente para leitura).

O nível de isolamento de uma transação determina quais dados a transação pode ver quando outras transações estão processando concorrentemente.

READ COMMITTED
A declaração consegue ver apenas as linhas efetivadas (commit) antes do início da sua execução. Este é o padrão.
SERIALIZABLE
A transação corrente vê apenas as linhas efetivadas antes da primeira consulta ou comando de modificação de dados ter sido executado nesta transação.
Dica: 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, deixariam.

O nível de isolamento da transação não pode ser mudado após a primeira consulta ou comando de modificação de dado da transação (SELECT, INSERT, DELETE, UPDATE, FETCH ou COPY) ter sido executado. Veja o Capítulo 12 para obter mais informações sobre o isolamento de transações e controle de concorrência.

O modo de acesso da transação determina se a transação lê e escreve, ou se é somente para leitura. Ler e escrever é o padrão. Quando a transação é somente para leitura, os seguintes comandos SQL não são permitidos: INSERT, UPDATE, DELETE e COPY TO se a tabela a ser escrita não for uma tabela temporária; todos os comandos CREATE, ALTER e DROP; COMMENT, GRANT, REVOKE, TRUNCATE; também EXPLAIN ANALYZE e EXECUTE se o comando a ser executado está entre os listados. Esta é uma noção de somente para leitura de alto nível, que não impede escritas no disco.

Observações

O nível de isolamento padrão da transação para a sessão também pode ser definido pelo comando

SET default_transaction_isolation = 'valor'

no arquivo de configuração. Consulte a Seção 16.4 para obter mais informações.

Compatibilidade

Os dois comandos estão definidos no padrão SQL. No padrão SQL SERIALIZABLE é o nível de isolamento padrão; no PostgreSQL normalmente o padrão é READ COMMITTED, mas pode ser mudado conforme mencionado acima. O PostgreSQL não possui os níveis de isolamento READ UNCOMMITTED e REPEATABLE READ. Devido à falta de bloqueio de predicado (predicate locking), o nível SERIALIZABLE não é verdadeiramente serializável. Veja o Capítulo 12 para obter detalhes.

No padrão SQL existe uma outra característica de transação que pode ser definida por estes comandos: o tamanho da área de diagnósticos. Este conceito só se aplica à linguagem SQL incorporada.

SourceForge.net Logo