Имя |
Тип данных |
Описание |
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. Индексация массива начинается с нуля |
В листинге 11.52 приведен пример определения трнггерной функции PL/pgSDL, использующей некоторые из перечисленных переменных. Триггерная функция check_shipment_addition() вызывается после выполнения операции INSERT или UPDATE с таблицей shipments.
Функция check_shipment_addition() убеждается в том, что каждая новая запись содержит действительный код покупателя и код ISBN книги. Затем общее количество экземпляров в таблице stock уменьшается на 1, если триггер сработал по команде SQL INSERT (но не по команде UPDATE!)