CRЕАТЕ TRIGGER
Создание нового триггера.
Синтаксис:
CREATE TRIGGER триггер { BEFORE | AFTER } { событие [ OR событие… ] } ON таблица FOR EACH { ROW STATEMENT } EXECUTE PROCEDURE функция (аргументы)
Параметры:
- триггер. Имя создаваемого триггера.
- таблица. Имя таблицы, с которой ассоциируется триггер.
- событие. Событие, по которому срабатывает триггер. Допустимые значения – INSERT, DELETE и UPDATE. Триггер может быть связан с несколькими событиями.
- функция. Имя функции, связываемой с новым триггером. Функция вызывается при срабатывании триггера; в определении должен быть указан тип возвращаемого значения opaque – этот тип используется только внутренними функциями, которые не могут напрямую вызываться в командах SQL.
- аргументы. Строка аргументов, передаваемая функции при срабатывании триггера.
Результаты:
CREATE. Это сообщение выдается при успешном создании нового триггера.
Описание
Команда CREATE TRIGGER создает триггер в базе данных. Триггер ассоциируется с таблицей, указанной в секции ON. При срабатывании триггера автоматически выполняется заданная функция.
Примечание
Триггеры могут создаваться только владельцами таблиц или суперпользователями.
При создании триггера необходимо выбрать время срабатывания (до или после попытки выполнения некоторой операции). Если триггер срабатывает до заданного события (BEFORE), он может отменить выполнение операции для текущей записи или изменить данные, заносимые в таблицу. Если триггер срабатывает после заданного события (AFTER), он будет знать обо всех изменениях, внесенных в результате события.
Примеры
Следующая команда определяет триггер, вызываемый при обновлении существующей записи в таблице authors:
booktown=# CREATE TRIGGER sync_authors_books Dooktown-# BEFORE UPDATE booktown-# ON authors booktown-# FOR EACH ROW booktown-# EXECUTE PROCEDURE sync authors and booksO; CREATE
Функция PL/pgSQL sync_authors_and_books () обновляет значение поля author_id таблицы books при обновлении ноля id в таблице authors. Тем самым поддерживается синхронизация таблиц books и authors. Аналогичного эффекта можно было бы добиться при помощи ограничения FOREIGN KEY (см. главу 7).