Noções Básicas de Triggers
9 exemplos para você começar com triggers PostgreSQL - 6 básicos e 3 intermediários.
Busque em todas as páginas da documentação
9 exemplos para você começar com triggers PostgreSQL - 6 básicos e 3 intermediários.
Tabela com INSERT/UPDATE que você pode modificar em desenvolvimento.
# Desenvolvimento local com Docker (PostgreSQL 18)
docker run -d --name pg18 -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:18
psql postgres://postgres:dev@localhost:5432/postgresExecuta por linha inserida.
CREATE OR REPLACE FUNCTION app.log_insert() RETURNS trigger
LANGUAGE plpgsql AS $$
BEGIN
RAISE NOTICE 'inserted %', NEW.id;
RETURN NEW;
END;
$$;
CREATE TRIGGER tr_log_insert AFTER INSERT ON app.accounts
FOR EACH ROW EXECUTE FUNCTION app.log_insert();Pode modificar NEW antes da escrita.
CREATE OR REPLACE FUNCTION app.touch_updated() RETURNS trigger
LANGUAGE plpgsql AS $$
BEGIN
NEW.updated_at := now();
RETURN NEW;
END;
$$;updated_atDispara uma vez por instrução SQL.
CREATE TRIGGER tr_stmt AFTER UPDATE ON app.accounts
FOR EACH STATEMENT EXECUTE FUNCTION app.log_insert();Remova quando a lógica for movida para o app.
DROP TRIGGER IF EXISTS tr_log_insert ON app.accounts;Escolha entre BEFORE e AFTER.
-- BEFORE: validar/modificar NEW
-- AFTER: auditar/efeitos colaterais referenciando a linha finalExecução condicional do trigger.
CREATE TRIGGER tr_status AFTER UPDATE OF status ON app.orders
FOR EACH ROW WHEN (OLD.status IS DISTINCT FROM NEW.status)
EXECUTE FUNCTION app.log_insert();Ordem alfabética de nomes por padrão.
CREATE TRIGGER a_first BEFORE INSERT ON app.accounts FOR EACH ROW EXECUTE FUNCTION app.touch_updated();
CREATE TRIGGER b_second BEFORE INSERT ON app.accounts FOR EACH ROW EXECUTE FUNCTION app.log_insert();Verificação de restrição adiada.
-- CONSTRAINT TRIGGER ... DEFERRABLE INITIALLY DEFERREDsession_replication_role ou ALTER TABLE DISABLE.
ALTER TABLE app.accounts DISABLE TRIGGER tr_log_insert;
-- carga em massa
ALTER TABLE app.accounts ENABLE TRIGGER tr_log_insert;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+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026