Триггер в PostgreSQL — это механизм, который автоматически выполняет определённый код при наступлении заданного события в таблице. Такие события могут включать вставку, обновление или удаление строк.
Синтаксис CREATE TRIGGER
CREATE TRIGGER имя_триггера
{ BEFORE | AFTER | INSTEAD OF } { INSERT | UPDATE | DELETE | TRUNCATE }
ON имя_таблицы
[ FOR EACH { ROW | STATEMENT } ]
[ WHEN (условие) ]
EXECUTE FUNCTION имя_функции();BEFORE— триггер срабатывает перед выполнением операции.AFTER— триггер срабатывает после выполнения операции.INSTEAD OF— используется для триггеров представлений, заменяя стандартное поведение.FOR EACH ROW— триггер выполняется для каждой затронутой строки.FOR EACH STATEMENT— триггер выполняется один раз для всего запроса.WHEN (условие)— выполняет триггер только при выполнении указанного условия.EXECUTE FUNCTION— указывает функцию, выполняемую триггером.
Создание простого триггера
Пример триггера, который записывает изменения в таблице users в журнал:
CREATE FUNCTION log_user_changes() RETURNS TRIGGER AS $$
BEGIN
INSERT INTO user_logs(user_id, action, change_time)
VALUES (NEW.id, TG_OP, NOW());
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER user_update_trigger
AFTER UPDATE ON users
FOR EACH ROW
EXECUTE FUNCTION log_user_changes();Триггер для предотвращения удаления данных
CREATE FUNCTION prevent_delete() RETURNS TRIGGER AS $$
BEGIN
RAISE EXCEPTION 'Удаление запрещено!';
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER no_delete_trigger
BEFORE DELETE ON users
FOR EACH ROW
EXECUTE FUNCTION prevent_delete();Команда CREATE TRIGGER в PostgreSQL создаёт триггеры для автоматического выполнения действий при изменении данных в таблицах. Триггеры могут использоваться для ведения журнала, проверки данных и других задач.