>_ IzzyLab

Практическое задание

PostgreSQL: триггер аудита

сложно

В базе shop есть пустые таблицы products(id,name,price) и audit(id serial, msg text). Напиши PL/pgSQL функцию-триггер, которая при каждом INSERT в products добавляет запись в audit, и навесь её как триггер AFTER INSERT. Затем вставь один товар — в audit должна появиться запись.

Что потренируешь:
  • триггеры
  • pl/pgsql
  • create function
  • create trigger
  • postgresql

Разбор темы

Триггер в PostgreSQL — связка из двух частей: функции на PL/pgSQL и собственно триггера, который её вызывает на событие таблицы. Функция объявляется с RETURNS trigger, а в её теле к полям только что затронутой строки обращаются через специальную запись NEW; завершается она обычно возвратом этой строки. Затем на таблицу навешивается триггер с указанием момента (AFTER INSERT) и режима (FOR EACH ROW), связывающий событие с функцией. Порядок важен: функция должна существовать раньше триггера, а многострочный SQL удобно скормить psql через heredoc или файл.

Что проверяется

  1. триггер AFTER INSERT на products есть
  2. вставка товара создала запись в audit

Как это выглядит