CREATE TRIGGER в PostgreSQL: создание триггера

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