Создание таблицы журнала событий и функции триггера
На этом шаге вы создадите таблицу event_log
и функцию log_ddl_event
. Таблица event_log
будет хранить детали событий базы данных, а функция log_ddl_event
будет выполняться при возникновении определенного события.
Сначала подключитесь к базе данных PostgreSQL от имени пользователя postgres
:
sudo -u postgres psql
Теперь создайте таблицу event_log
, выполнив следующую SQL-команду:
CREATE TABLE event_log (
event_time timestamp without time zone,
event_type text,
schema_name text,
object_name text,
command_tag text
);
Эта команда создает таблицу с именем event_log
со столбцами для хранения времени события, типа события, имени схемы, имени объекта и тега команды (command tag).
Далее создайте функцию триггера событий log_ddl_event
. Выполните следующую SQL-команду:
CREATE OR REPLACE FUNCTION log_ddl_event()
RETURNS event_trigger
AS $$
BEGIN
INSERT INTO event_log (event_time, event_type, schema_name, object_name, command_tag)
VALUES (NOW(), TG_EVENT, TG_TABLE_SCHEMA, TG_TABLE_NAME, TG_TAG);
END;
$$ LANGUAGE plpgsql;
Эта команда создает функцию с именем log_ddl_event
. Давайте разберем, что делает эта функция:
CREATE OR REPLACE FUNCTION log_ddl_event()
: Создает или заменяет функцию с именем log_ddl_event
.
RETURNS event_trigger
: Указывает, что функция является функцией триггера событий (event trigger function).
AS $$ ... $$ LANGUAGE plpgsql
: Определяет тело функции с использованием языка plpgsql
.
INSERT INTO event_log ...
: Вставляет новую строку в таблицу event_log
с деталями события.
NOW()
: Получает текущую метку времени (timestamp).
TG_EVENT
: Специальная переменная, содержащая тип события, которое вызвало функцию (например, CREATE TABLE
).
TG_TABLE_SCHEMA
: Специальная переменная, содержащая имя схемы объекта, который вызвал функцию.
TG_TABLE_NAME
: Специальная переменная, содержащая имя объекта, который вызвал функцию.
TG_TAG
: Специальная переменная, содержащая тег команды (command tag) события (например, CREATE TABLE
).
После выполнения вышеуказанных команд вы должны увидеть CREATE TABLE
и CREATE FUNCTION
в выводе, что указывает на успешное создание таблицы и функции.