Триггер в 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 создаёт триггеры для автоматического выполнения действий при изменении данных в таблицах. Триггеры могут использоваться для ведения журнала, проверки данных и других задач.