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