Delimitar uma unidade de trabalho no banco
Transação delimita uma unidade de trabalho no banco. Quando reúne alterações, permite confirmá-las em conjunto ou cancelar as mudanças cobertas por essa unidade. As garantias e o comportamento diante de falhas dependem do banco e da configuração utilizada.
Uma aplicação pode precisar criar uma turma e registrar suas associações obrigatórias. Tratar cada gravação como uma operação independente pode deixar apenas parte do cadastro pronta. Uma transação permite coordenar a confirmação desse conjunto.
O código precisa definir quais comandos usam a mesma transação e quando ela termina. Uma chamada externa, outra conexão ou uma gravação já confirmada permanece fora desse conjunto, mesmo quando aparece na mesma função da aplicação.
Início, operações e conclusão
BEGIN;
INSERT INTO turmas (id, nome) VALUES (10, 'Turma de teste');
INSERT INTO matriculas (pessoa_id, turma_id) VALUES (7, 10);
COMMIT;O exemplo pressupõe tabelas compatíveis, o estudante 7 existente e o identificador 10 disponível para criar a turma. Entre BEGIN e COMMIT, as duas gravações participam do mesmo bloco, cuja confirmação é solicitada ao final. Para cancelar esse conjunto antes da confirmação, ROLLBACK descarta suas alterações transacionais.
Bibliotecas podem oferecer uma função que abre a transação e gerencia o encerramento. Ainda assim, você precisa saber se um erro provoca cancelamento ou se foi capturado e ignorado pelo código. O comportamento não deve ser presumido apenas pelo nome da função.
Atomicidade e isolamento
Atomicidade trata da confirmação ou do cancelamento do conjunto. Isolamento trata de como transações simultâneas observam e afetam o trabalho umas das outras. Usar uma transação não resolve automaticamente toda disputa por um recurso.
Duas operações podem ler a mesma disponibilidade e tentar utilizá-la ao mesmo tempo. O projeto pode precisar de restrições, controle de concorrência ou um nível de isolamento apropriado. A regra de negócio precisa ser testada com chamadas simultâneas quando esse caso for relevante.
Transações longas também podem manter recursos ocupados e interferir em outras operações. Evite deixá-las abertas enquanto aguarda uma interação humana ou uma chamada externa demorada. O escopo deve corresponder ao trabalho que o banco precisa confirmar em conjunto.
Efeitos fora do banco
Enviar uma mensagem antes do commit pode anunciar uma operação que depois será cancelada. Enviar apenas depois do commit elimina esse caso, mas ainda deixa a possibilidade de falhar entre a confirmação e o envio. Sistemas que precisam garantir o encaminhamento podem registrar uma tarefa pendente na mesma transação e processá-la depois.
O processamento posterior precisa registrar o resultado do envio e tratar novas tentativas sem duplicar o efeito no destino. Uma tarefa pendente no banco permite acompanhar o trabalho, mas não comprova que a mensagem foi entregue. O verbete de rollback de transação detalha o que o cancelamento efetivamente desfaz.
Dúvidas frequentes
Perguntas frequentes sobre Transação
- Toda instrução precisa de BEGIN explícito?
- No PostgreSQL, instruções também executam em transações implícitas quando não há um bloco explícito. Para agrupar várias operações, a aplicação ou biblioteca precisa definir essa unidade.
- Transação resolve qualquer concorrência?
- O comportamento depende do isolamento, das restrições e da lógica aplicada. Operações simultâneas podem exigir controles adicionais e testes específicos.
- Uma transação local inclui automaticamente outra API?
- O banco não controla automaticamente efeitos externos. A aplicação precisa coordenar chamadas, repetição e recuperação quando o trabalho envolve outros serviços.
- Posso manter a transação aberta enquanto aguardo aprovação manual?
- Uma espera longa pode manter recursos ocupados e interferir em outras operações. O fluxo deve separar a interação humana da unidade de trabalho que precisa ser confirmada.
Para continuar
Recursos relacionados
Documentação
Transações no PostgreSQL
Explica confirmação, cancelamento e agrupamento de operações no banco.
Abrir recursoDocumentação
ROLLBACK no PostgreSQL
Documenta o cancelamento da transação atual.
Abrir recursoSite de referência
Desenvolvimento Colaborativo da Dev Side Studio
Conheça o acompanhamento técnico ao vivo para revisar o conjunto de gravações coberto por uma transação e o comportamento após uma falha.
Abrir recursoAplicação na formação
Formação DevOps
Transações delimitam os conjuntos de gravações que precisam ser confirmados ou cancelados nas rotinas da aplicação.
Conhecer a formação
Fontes consultadas
Referências deste verbete
Este verbete ajudou você?
Obrigado pela resposta. Ela fica salva apenas neste navegador.