PostgreSQL Триггеры: создание, список и удаление с примером

Что такое триггер PostgreSQL?

A PostgreSQL Вызывать — это функция, которая запускается автоматически, когда событие базы данных происходит в объекте базы данных. Например, стол. Примеры событий базы данных, которые могут активировать триггер, включают INSERT, UPDATE, DELETE и т. д. Более того, когда вы создаете триггер для таблицы, триггер будет автоматически удален при удалении этой таблицы.

Как используется триггер PostgreSQL?

Триггер можно пометить оператором FOR EACH ROW во время его создания. Такой триггер будет вызываться один раз для каждой строки, измененной операцией. Триггер также можно пометить оператором FOR EACH STATEMENT во время его создания. Этот триггер будет выполнен только один раз для конкретной операции.

PostgreSQL Создание триггера

Для создания триггера мы используем функцию CREATE TRIGGER. Вот синтаксис функции:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name  
ON table-name  
[  
 -- Trigger logic  
];

Имя триггера — это имя триггера.

BEFORE, AFTER и INSTEAD OF — это ключевые слова, которые определяют, когда будет вызван триггер.

Имя события — это имя события, которое вызовет вызов триггера. Это может быть ВСТАВИТЬ, ОБНОВЛЕНИЕ, УДАЛЕНИЕ и т. д.

Имя таблицы — это имя таблицы, для которой должен быть создан триггер.

Если триггер должен быть создан для операции INSERT, мы должны добавить параметр ON имя столбца.

Следующий синтаксис демонстрирует это:

CREATE TRIGGER trigger-name AFTER INSERT ON column-name  
ON table-name  
[  
 -- Trigger logic
];

PostgreSQL Создать пример триггера

Мы будем использовать таблицу цен, приведенную ниже:

Цена:

PostgreSQL Создание триггера

Давайте создадим еще одну таблицу Price_Audits, в которой будем регистрировать изменения, внесенные в таблицу цен:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
);

Теперь мы можем определить новую функцию с именем Auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql;

Вышеупомянутая функция вставит запись в таблицу Price_Audits, включая новый идентификатор строки и время создания записи.

Теперь, когда у нас есть триггерная функция, нам следует привязать ее к нашей таблице цен. Мы дадим триггеру имя Price_trigger. Перед созданием новой записи автоматически вызывается триггерная функция для регистрации изменений. Вот триггер:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc();

Вставим новую запись в таблицу Price:

INSERT INTO Price 
VALUES (3, 400);

Теперь, когда мы вставили запись в таблицу Price, ее следует также вставить в таблицу Price_Audit. Это будет результатом триггера, который мы создали в таблице цен. Давайте проверим это:

SELECT * FROM Price_Audits;

Это вернет следующее:

PostgreSQL Создание триггера

Триггер сработал успешно.

Триггер списка Postgres

Все триггеры, которые вы создаете в PostgreSQL хранятся в таблице pg_trigger. Чтобы просмотреть список триггеров, которые у вас есть на база данных, запросите таблицу, выполнив команду SELECT, как показано ниже:

SELECT tgname FROM pg_trigger;

Это возвращает следующее:

Триггер списка Postgres

Столбец tgname таблицы pg_trigger обозначает имя триггера.

Триггер удаления Postgres

Чтобы оставить PostgreSQL триггера, мы используем оператор DROP TRIGGER со следующим синтаксисом:

DROP TRIGGER [IF EXISTS] trigger-name 
ON table-name [ CASCADE | RESTRICT ];

Параметр Trigger-Name обозначает имя триггера, который необходимо удалить.

Имя_таблицы обозначает имя таблицы, из которой нужно удалить триггер.

Предложение IF EXISTS пытается удалить существующий триггер. Если вы попытаетесь удалить несуществующий триггер без использования предложения IF EXISTS, вы получите сообщение об ошибке.

Опция CASCADE поможет вам автоматически удалить все объекты, зависящие от триггера.

Если вы используете опцию RESTRICT, триггер не будет удален, если от него зависят объекты.

Например:

Чтобы удалить триггер с именем example_trigger в таблице Price, мы запускаем следующую команду:

Чтобы поместить триггер с именем example_trigger в таблицу Company, выполните следующую команду:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Использование pgAdmin

Теперь посмотрим, как все три действия выполняются с помощью pgAdmin.

Как создать триггер в PostgreSQL используя pgAdmin

Вот как вы можете создать триггер в Postgres с помощью pgAdmin:

Шаг 1) Войдите в свою учетную запись pgAdmin.

Откройте pgAdmin и войдите в свою учетную запись, используя свои учетные данные.

Шаг 2) Создайте демонстрационную базу данных

  1. На панели навигации слева нажмите «Базы данных».
  2. Нажмите Демо.

Создать триггер в PostgreSQL используя pgAdmin

Шаг 3) Введите запрос

Чтобы создать таблицу Price_Audits, введите в редакторе запрос:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

Шаг 4) Выполните запрос

Нажмите кнопку «Выполнить»

Создать триггер в PostgreSQL используя pgAdmin

Шаг 5) Запустите код функции аудита.

Запустите следующий код, чтобы определить функцию Auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql

Шаг 6) Запустите код, чтобы создать триггер.

Запустите следующий код, чтобы создать триггер Price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

Шаг 7) Вставьте новую запись

  1. Выполните следующую команду, чтобы вставить новую запись в таблицу цен:
    INSERT INTO Price
    VALUES (3, 400)
  2. Выполните следующую команду, чтобы проверить, была ли вставлена ​​запись в таблицу Price_Audits:
    SELECT * FROM Price_Audits

    Это должно вернуть следующее:

Создать триггер в PostgreSQL используя pgAdmin

Шаг 8) Проверьте содержимое таблицы

Проверим содержимое таблицы Price_Audits:

Листинг триггеров с помощью pgAdmin

Шаг 1) Запустите следующую команду, чтобы проверить триггеры в вашей базе данных:

SELECT tgname FROM pg_trigger

Это возвращает следующее:

Листинг триггеров с помощью pgAdmin

Удаление триггеров с помощью pgAdmin

Чтобы поместить триггер с именем example_trigger в таблицу Company, выполните следующую команду:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Резюме

  • A PostgreSQL Триггер относится к функции, которая запускается автоматически, когда событие базы данных происходит в объекте базы данных, например в таблице.
  • Примеры таких событий базы данных: INSERT, UPDATE, DELETE и т. д.
  • Триггер существует только во время существования объекта базы данных, для которого он был создан.
  • Если объект базы данных будет удален, триггер также будет удален.
  • PostgreSQL триггеры создаются с помощью оператора CREATE TRIGGER.
  • Каждый триггер связан с функцией, определяющей, что будет делать триггер при его вызове.

Загрузите базу данных, используемую в этом руководстве.