Ответ
Триггеры — это хранимые процедуры, автоматически выполняемые при наступлении событий (INSERT, UPDATE, DELETE) в таблице.
Основные сценарии использования:
- Аудит и логирование: Запись изменений в отдельную таблицу.
- Валидация данных: Проверка сложных бизнес-правил перед операцией.
- Поддержание целостности: Каскадные изменения в связанных таблицах.
Пример триггера в PostgreSQL для аудита:
CREATE TABLE audit_log (
id SERIAL PRIMARY KEY,
table_name VARCHAR(100),
operation VARCHAR(10),
old_data JSONB,
new_data JSONB,
changed_at TIMESTAMP DEFAULT NOW()
);
CREATE OR REPLACE FUNCTION log_user_changes()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO audit_log (table_name, operation, old_data, new_data)
VALUES ('users', TG_OP, to_jsonb(OLD), to_jsonb(NEW));
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER users_audit_trigger
AFTER INSERT OR UPDATE OR DELETE ON users
FOR EACH ROW EXECUTE FUNCTION log_user_changes();
Лучшие практики:
- Избегайте сложной логики: Триггеры должны быть простыми, иначе они замедляют операции.
- Учитывайте рекурсию: Триггеры могут вызывать сами себя.
- Тестирование: Тщательно тестируйте, так как ошибки в триггерах влияют на все связанные операции.
Альтернативы: Часть логики можно перенести в прикладной код для упрощения отладки и миграций.