BEGIN

Name

BEGIN  --  inicia um bloco de transação

Synopsis

  
BEGIN [ WORK | TRANSACTION ]
  

Entradas

WORK
TRANSACTION

Palavras chave opcionais. Não produzem nenhum efeito.

Saídas

BEGIN

Significa que uma nova transação começou.

NOTICE: BEGIN: already a transaction in progress

Indica que uma transação está sendo executada. A transação corrente não é afetada.

Descrição

Por padrão, o PostgreSQL executa as transações em modo não encadeado (também conhecido por "autocommit" [auto-efetivação] em outros sistemas de banco de dados). Em outras palavras, cada comando é executado em sua própria transação e uma efetivação é implicitamente realizada ao final do comando (se a execução terminar com sucesso, senão um "rollback" é realizado). O comando BEGIN inicia uma transação no modo encadeado, ou seja, todas as declarações após o comando BEGIN são executadas como sendo uma única transação, até que seja encontrado um comando explícito COMMIT ou ROLLBACK, ou a execução ser abortada. Os comandos são executados mais rápido no modo encadeado, porque cada início/efetivação de transação requer uma atividade significativa de CPU e de disco. A execução de vários comandos em uma única transação também é requerida por motivo de consistência, quando várias tabelas relacionadas são modificadas.

O nível de isolamento padrão da transação no PostgreSQL é READ COMMITTED, onde os comandos dentro de uma transação enxergam apenas as mudanças efetivadas antes da execução do comando. Por esse motivo deve-se utilizar SET TRANSACTION ISOLATION LEVEL SERIALIZABLE logo após o comando BEGIN se for necessário um nível de isolamento mais rigoroso para a transação. No modo SERIALIZABLE os comandos enxergam apenas as modificações efetivadas antes do início de toda a transação (na verdade, antes da execução do primeiro comando DML em uma transação serializável).

Se a transação for efetivada, o PostgreSQL garante que todas as atualizações são realizadas ou, então, que nenhuma delas é realizada. As transações possuem a propriedade ACID (atomicidade, consistência, isolamento e durabilidade) padrão.

Notas

Consulte o comando LOCK para obter mais informações sobre o bloqueio de tabelas dentro de uma transação.

Utilize COMMIT ou ROLLBACK para terminar a transação.

Utilização

Para iniciar uma transação:

BEGIN WORK;
  

Compatibilidade

SQL92

O comando BEGIN é uma extensão do PostgreSQL à linguagem.. Não existe o comando BEGIN explícito no SQL92; o início de uma transação é sempre implícito, e termina pelo comando COMMIT ou pelo comando ROLLBACK.

Note: Muitos sistemas de banco de dados relacionais oferecem a funcionalidade de auto-efetivação (autocommit) por conveniência.

Lembre-se que a palavra chave BEGIN é utilizada para uma finalidade diferente no SQL embutido. Deve-se ter muito cuidado com relação à semântica da transação ao se portar aplicativos de banco de dados.

O SQL92 requer que SERIALIZABLE seja o nível de isolamento padrão das transações.