Иллюстрированный самоучитель по PostgreSQL

PL/pgSQL и триггеры

Определения триггеров PostgreSQL могут содержать ссылки на триггерные функции (то есть функции, которые должны вызываться при срабатывании триггера), написанные на языке PL/pgSQL Триггер определяет операцию, которая должна выполняться при наступлении некоторого события в базе данных.

Не путайте определение триггера с определением триггерной функции. Триггер определяется командой SQL CREATE TRIGGER, а триггерная функция определяется командой SQL CREATE FUNCTION. Триггеры описаны в главе 7.

Триггерная функция определяется без аргументов и возвращает значение специального типа данных opaque. Синтаксис определения триггерной функции PL/ pgSQL командой CREATE FUNCTION приведен в листинге 11.51.

Листинг 11.51. Определение триггерной функции.

CREATE FUNCTION функция () RETURNS opaque AS '
DECLARE
объявления;
[…]
BEGIN
команды;
[…]
END:
' LANGUAGE 'plpgsql':

В триггерных функциях используются специальные переменные, содержащие информацию о сработавшем триггере. С помощью этих переменных триггерная функция работает с данными таблиц. Специальные переменные триггерных функций перечислены в табл. 11.2.

Таблица 11.2. Специальные переменные в триггерных функциях.

Имя Тип данных Описание
NEW RECORD Новая запись базы данных, созданная командой INSERT или UPDATE при срабатывании триггера уровня записи (ROW). Переменная используется для модификации новых записей
OLD RECORD Старая запись базы данных, оставшаяся после выполнения команды INSERT или UPDATE при срабатывании триггера уровня записи (ROW)
TGJAME name Имя сработавшего триггера
TG_WHEN text Строка BEFORE или AFTER в зависимости от момента срабатывания триггера, указанного в определении (до или после операции)
TG_LEVEL text Строка ROW или STATEMENT в зависимости от уровня триггера, указанного в определении
TG_OP text Строка INSERT, UPDATE или DELETE в зависимости от операции, вызвавшей срабатывание триггера
TG_RELID old Идентификатор объекта таблицы, в которой сработал триггер
TG_RELNAME name Имя таблицы, в которой сработал триггер
TG_NARGS Integer Количество аргументов триггерной функции, указанных в определении триггера
TG_ARGV[] Массив text Аргументы, указанные в команде CREATE TRIGGER. Индексация массива начинается с нуля
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.