Tabelas de Transição
Tabelas de transição expõem NEW TABLE e OLD TABLE para triggers em nível de instrução, fornecendo acesso em massa a OLD/NEW sem o custo de triggers por linha.
Receita
CREATE TRIGGER tr_audit_stmt
AFTER INSERT ON app.accounts
REFERENCING NEW TABLE AS inserted
FOR EACH STATEMENT EXECUTE FUNCTION app.audit_inserted();Quando usar isso: Você implementa ou revisa SQL usando este conceito no PostgreSQL 18.
Exemplo de Trabalho
CREATE OR REPLACE FUNCTION app.audit_inserted() RETURNS trigger
LANGUAGE plpgsql AS $$
BEGIN
INSERT INTO app.audit_log (action, cnt)
SELECT 'insert', count(*) FROM inserted;
RETURN NULL;
END;
$$;O que isso demonstra:
REFERENCING NEW TABLE AS insertednomeia a relação de transição- O trigger em nível de instrução agrega as linhas inseridas uma vez
- Útil para auditoria de
COPYeINSERTem massa
Mergulho Profundo
Sintaxe
- Disponível em triggers de instrução
INSERT,UPDATE,DELETE. OLD TABLEemUPDATE/DELETE;NEW TABLEemINSERT/UPDATE.- As relações de transição são temporárias, como tabelas de transição de trigger no padrão SQL.
Armadilhas
- Transações longas - Bloqueiam o vacuum e aumentam o bloat. Correção: Confirme rapidamente; defina timeouts.
- Índices ausentes - Scans sequenciais sob carga. Correção: Indexe colunas de junção e filtro.
- Locks implícitos - Bloqueios inesperados. Correção: Use
FOR UPDATEexplícito quando necessário. - Suposição errada de isolamento - Anomalias sob escritas concorrentes. Correção: Escolha o nível deliberadamente.
- Migrações não testadas - Lock DDL ou objetos inválidos. Correção: Estágie migrações com dados semelhantes aos de produção.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Lógica em nível de aplicação | CRUD simples | Integridade espalhada por serviços |
| View materializada | Leituras repetidas intensas | Complexidade de atualização |
| Processador de stream externo | Eventos entre sistemas | Superfície operacional extra |
FAQs
Isso se aplica a réplicas?
Réplicas somente leitura executam SELECT; escritas vão para o primário.
E sobre o PgBouncer?
O pooling de transações afeta recursos em nível de sessão; use o modo de sessão quando necessário.
Relacionados
- Noções Básicas de Triggers - timing
- Triggers de Auditoria - padrões de auditoria
Versões da Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x, e PostGIS 3.5+.