← SQL: perguntas melhores aos dados
04 / 11 · 22 MIN

Alterações que preservam regras

Usa transações, restrições e planos de execução com propósito.

Uma unidade de trabalho

Uma transação permite confirmar alterações relacionadas ou revertê-las. Restrições como UNIQUE e FOREIGN KEY ajudam a preservar regras na base de dados, incluindo quando há vários clientes. Ainda é necessário escolher o nível de isolamento e tratar conflitos de concorrência.

Desempenho com evidência

Um índice pode acelerar certos acessos, mas acrescenta custo de escrita e armazenamento. Analisa consultas reais e planos de execução antes de criar índices indiscriminadamente. Testa alterações num ambiente adequado e conhece o seu impacto operacional.

Aplicação guiada no trabalho

Um agendador fictício grava o estado de uma execução e um evento de auditoria. Se ambos têm de existir juntos, inclui as duas escritas na mesma transação e confirma apenas quando a operação estiver válida. Caso contrário, reverte a unidade ainda aberta. Para impedir duas execuções com a mesma chave obrigatória, combina NOT NULL com UNIQUE e trata o conflito na aplicação. Um SELECT prévio não impede duas sessões de observar ausência ao mesmo tempo. Em PostgreSQL 18, UNIQUE isolado permite por omissão vários NULL; isso pode contrariar a intenção de uma chave obrigatória. Atomicidade local também não cobre uma chamada a outro sistema. Desenha a coordenação dos efeitos externos explicitamente, incluindo o que fazer quando não se conhece o resultado.

BEGIN;
UPDATE jobs SET status = 'running' WHERE id = 42;
INSERT INTO job_events(job_id, event) VALUES (42, 'started');
COMMIT;
NA PRÁTICA

Um agendamento precisa de impedir a criação de duas execuções com a mesma chave. Uma verificação apenas na aplicação pode falhar sob concorrência; uma restrição adequada protege a regra.

Armadilhas comuns

Usar SELECT prévio como exclusão mútua; assumir que UNIQUE implica NOT NULL.

Tópicos relacionados: Índices e planos de execução · Concorrência e atualização segura

Leva esta ideia contigo

A base de dados deve ajudar a preservar as regras, mesmo sob concorrência.

Criar conta

Referência: PostgreSQL 18: Transactions · PostgreSQL 18 reference semantics; DR SQL 2026.4; synthetic plan metrics and portable SQLite 3.51.2 examples