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. Индексация массива начинается с нуля |