Будь умным!


У вас вопросы?
У нас ответы:) SamZan.ru

Тригер спрацьовує автоматично при виконанні над таблицею команд SQL INSERT UPDTE або DELETE і запускає функцію

Работа добавлена на сайт samzan.ru: 2016-03-13


PAGE  3

        16 Тригери 

        PostgreSQL підтримує нестандартні розширення SQL, які називаються тригерами (trigger). Тригер спрацьовує автоматично при виконанні над таблицею команд SQL INSERT, UPDATE або DELETE і запускає функцію, яка буде виконуватися до або після цих операцій.

        Механізм обмежень PostgreSQL (CONSTRAINT) дозволяє реалізувати прості порівняння вхідних даних із статичними значеннями, але іноді перевірка повинна проводитися за більш  складними критеріями. Це типовий приклад ситуації, в якій зручно скористатися тригером.

        Визначення тригера має такий вигляд:

        CREATE TRIGGER тригер { BEFORE | AFTER } { подія [ OR подія ] } ON таблиця

        FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE функція( аргументи )

        Нижче подаються короткі описи компонентів цього визначення:

  •  CREATE TRIGGER тригер. Аргумент тригер означає ім’я тригера. Воно може збігатися з уже існуючим у базі даних, за умови, що цей тригер призначений для іншої таблиці;
  •  BEFORE | AFTER. Ключове слово BEFORE означає, що функція повинна виконуватися перед спробою виконання операції, включаючи всі вбудовані перевірки обмежень даних, які реалізовуються при виконанні команд INSERT і DELETE. AFTER означає, що функція викликається після завершення операції, яка приводить у дію тригер;
  •  подія [OR подія ...] – події SQL. При перерахуванні декількох подій як роздільник використовується ключове слово OR;
  •  ON таблиця – ім’я таблиці, модифікація якої спричиняє запуск тригера;
  •  FOR EACH { ROW | STATEMENT } – визначення кількості викликів функції при настанні вказаної події. ROW означає, що функція викликається для кожного запису, який модифікується. Якщо функція повинна викликатися всього один раз для всієї команди, то використовується ключове слово STATEMENT;
  •  EXECUTE PROCEDURE функція(аргументи) – ім’я функції з аргументами, яку викликає тригер.

        Таблиця 1 – Структура системної таблиці pg_trigger

Ім’я поля таблиці pg_trigger

Тип поля

Опис змінної

tgrelid

oid

Системний ідетифікатор запису таблиці, яку обслуговує тригер

tgname

name

Ім’я тригера

tgfoid

oid

tgtype

smallint

tgenabled

“char”

tgisconstraint

old

tgconstrname

name

tgconstrrelid

oid

tgdeferrable

boolean

tginitdeferred

boolean

tgnargs

smallint

tgattr

int2vector

tgargs

bytea

        Отримати інформацію про існуючі тригери можна із системної таблиці pg_trigger, структура якої приведена в таблиці 1. Більшість її полів у запитах прямо не використовуються. Серед атрибутів тригера центральне місце займають tgrelid і tgname. У полі tgrelid зберігається ідентифікатор відношення, з яким пов’язаний даний тригер.

        Створення або видалення тригера дозволено лише суперкористувачу або власнику бази даних. Команда видалення тригера має такий вигляд:

        DROP TRIGGER імя ON таблиця

        У прикладі 1 показано видалення тригера check_ship, встановленого для таблиці ship.

        Приклад 1 – Видалення тригера

        DROP TRIGGER check_ship ON ship;

 

        Зауважимо, що при видаленні вказується не тільки ім’я тригера, але й ім’я таблиці.

        Ім’я таблиці, для якої був установлений тригер, при необхідності можна прочитати з системних таблиць PostgreSQL. Наприклад, можна провести об’єднання полів tgrelid системної таблиці pg_trigger і поля relfilenode системної таблиці pg_class та порівняти ім’я тригера з полем tgname. Запит, приведений у прикладі 2, повертає ім’я таблиці (relname), зв’язаної з тригером check_ship. Як видно з результатів запиту, це одна таблиця ship.

        Приклад 2 – Отримання імені таблиці, пов’язаної з тригером check_ship

        SELECT relname FROM pg_class

        INNER JOIN pg_trigger ON (tgrelid = relfilenode)

        WHERE tgname = 'check_ship';

 relname

-----------

ship

(1 row)

        Визначення тригера PostgreSQL може містити посилання на тригерну функцію, тобто функцію, яка повинна викликатися при спрацьовуванні тригера. Не слід плутати визначення тригера з визначенням функції. Тригер визначається командою SQL CREATE TRIGGER, а тригерна функція – CREATE FUNCTION.  

        Тригерна функція повинна бути визначена до визначення тригера, який її викликає. Тригерні функції завжди визначаються раніше, ніж тригери.

        При видаленні функції, яку викликає тригер, він перестає працювати, причому повторне визначення функції з тим же ім’ям не виправить проблему. Після повторного створення функції тригер також доводиться створювати наново.

      Тригерна функція визначається без аргументів і повертає значення спеціального типу даних trigger. Це запис, він має ту ж структуру, що й таблиця, яка викликала тригер. Синтаксис тригерної функції має такий вигляд:

        CREATE FUNCTION ім’я_функції() RETURNS trigger AS 

        $$

        DECLARE

        оголошення;

        BEGIN

        команди;

        END;

        $$

        LANGUAGE 'plpgsql';

        У тригерних функціях використовуються спеціальні змінні, які створюються автоматично і містять інформацію про спрацювання тригера. Вони перераховані в таблиці 2.

        Таблиця 2 – Спеціальні змінні тригерних функцій

Ім’я змінної

Тип змінної

Опис

NEW

record

Новий запис бази даних, створений командою INSERT або UPDATE при спрацюванні тригера рівня запису (ROW). Змінна використовується для модифікації нових записів

OLD

record

Старий запис бази даних, який запамятався після виконання команд INSERT або UPDATE при спрацюванні тригера рівня запису (ROW)

TG_NAME

name

Ім’я тригера

TG_WHEN

text

Рядок BEFORE або AFTER, в залежності від момента спрацьовування   тригера, зазначеного у визначенні (до або після операції)

TG_LEVEL

text  

Рядок ROW або STATEMENT, в залежності від рівня тригера, зазначеного у визначенні

TG_OP

text  

Слово INSERT, UPDATE, DELETE або TRUNCATE, в залежності від операції, яка викликала тригер

TG_RELID

oid  

Ідентифікатор об’єкта таблиці, в якій спрацював тригер

TG_RELNAME

name

Ім’я таблиці, в якій спрацював тригер (застаріле).

TG_TABLE_NAME 

name

Ім’я таблиці, в якій спрацював тригер (версія 9.0 Beta)

TG_TABLE_SCHEMA

name

Імя схеми (версія 9.0 Beta)

TG_NARGS

integer

Кількість аргументів тригерної функції, зазначених у визначенні тригера

TG_ARGV[ ]

text

Масив аргументів, зазначених у команді CREATE TRIGGER. Індексація масиву починається з нуля

        Слід наголосити на тому, що функція повинна бути оголошена без аргументів, навіть якщо вона розрахована на отримання аргументів, зазначених у інструкції CREATE TRIGGER. Аргументи тригера, якщо вони є, передаються через масив tg_argv[].




1. Держбюджет та проблема бюджетного дефіциту в Україні
2. Тема 2. Информация и информационные технологии
3. 3 PRT 1 SOCILIZING
4. Диагностика детей группы риска в предшкольный период
5. Взыскание алиментов на содержание детей
6. Чтение - самое полезное дело
7. Тема- Срок сдачи студентом законченной курсовой работы- Исходные данные- литература по дисциплине
8. на тему- Основные средства предприятия и их использование Выполнила- студентка группы 21 М Ефимова
9. Агрессия и способность к прогнозированию в подростковом возрасте
10. Вариант 11 В1 На автозаправке клиент отдал кассиру 1000 рублей и залил в бак 21 литр бензина по цене 27 руб
11. Конспект лекции по Информатизации и автоматизации производства
12. СЕВЕРОКАВКАЗСКАЯ АКАДЕМИЯ ГОСУДАРСТВЕННОЙ СЛУЖБЫ Кафедра экономики финансов и природопользования
13. Тема- ЭКСТЕРЬЕРНЫЕ ОСОБЕННОСТИ АЛТАЙСКОГО ЗЕРКАЛЬНОГО КАРПА F8 ЧУМЫШСКОЙ И ПРИОБСКОЙ ПОПУЛЯЦИИ
14. Сибирская Сервисная Компания
15. Судебная экспертиза процессуальное действие состоящее из проведения исследований и дачи заключения экс
16. Идиопатическая тромбоцитопеническая пурпура Геморрагический васкулит
17. на тему- Кон~юнктура світового ринку олова Виконала- студентка 4 курс
18. Безопасность и экологичность проекта
19. Средства создания комического в детективах Д Донцовой
20. ЛМЗ ~ СТЭМА Заключение Список используемой литературы