9.29. Функции триггеров событий#
9.29. Функции триггеров событий #
Tantor BE предоставляет эти вспомогательные функции для извлечения информации из триггеров событий.
Для получения дополнительной информации о триггерах событий, см. Глава 37.
9.29.1. Захват изменений в конце команды #
pg_event_trigger_ddl_commands() →setof record
pg_event_trigger_ddl_commands возвращает список
команд DDL, выполненных при каждом действии пользователя,
когда он вызывается в функции, присоединенной к событию
ddl_command_end. Если он вызывается в любом другом
контексте, возникает ошибка.
pg_event_trigger_ddl_commands возвращает одну строку для каждой
базовой команды, выполненной; некоторые команды, которые являются одним SQL-предложением,
могут возвращать более одной строки. Эта функция возвращает следующие
столбцы:
| Имя | Тип | Описание |
|---|---|---|
classid | oid | OID каталога, к которому принадлежит объект |
objid | oid | OID объекта |
objsubid | integer | Идентификатор подобъекта (например, номер атрибута для столбца) |
command_tag | text | Тег команды |
object_type | text | Тип объекта |
schema_name | text |
Имя схемы, к которой принадлежит объект, если таковая имеется; в противном случае NULL.
Никаких кавычек не применяется.
|
object_identity | text | Текстовое представление идентификатора объекта, с указанием схемы. Каждый идентификатор включенный в идентификатор объекта, заключен в кавычки, если необходимо. |
in_extension | boolean | True если команда является частью скрипта расширения |
command | pg_ddl_command | Полное представление команды во внутреннем формате. Это нельзя вывести напрямую, но его можно передать другим функциям, чтобы получить различную информацию о команде. |
9.29.2. Обработка объектов, удаленных командой DDL #
pg_event_trigger_dropped_objects() →setof record
pg_event_trigger_dropped_objects возвращает список всех объектов, удаленных командой, в событии sql_drop, в котором она вызывается.
Если вызывается в любом другом контексте, возникает ошибка.
Эта функция возвращает следующие столбцы:
| Имя | Тип | Описание |
|---|---|---|
classid | oid | OID каталога, к которому принадлежит объект |
objid | oid | OID объекта |
objsubid | integer | Идентификатор подобъекта (например, номер атрибута для столбца) |
original | boolean | True, если это был один из корневых объектов удаления |
normal | boolean | True, если существует нормальная зависимостная связь в графе зависимостей, приводящая к этому объекту |
is_temporary | boolean | True если это был временный объект |
object_type | text | Тип объекта |
schema_name | text |
Имя схемы, к которой принадлежит объект, если таковая имеется; в противном случае NULL.
Никаких кавычек не применяется.
|
object_name | text |
Имя объекта, если комбинация схемы и имени может быть использована в качестве уникального идентификатора для объекта; в противном случае NULL.
Никакие кавычки не применяются, и имя никогда не содержит указание схемы.
|
object_identity | text | Текстовое представление идентификатора объекта, с указанием схемы. Каждый идентификатор включенный в идентификатор объекта, заключен в кавычки, если необходимо. |
address_names | text[] |
Массив, который вместе с object_type и
address_args может быть использован
функцией pg_get_object_address для
воссоздания адреса объекта на удаленном сервере, содержащем
объект с таким же именем и типом.
|
address_args | text[] |
Дополнение для address_names
|
Функция pg_event_trigger_dropped_objects может быть использована
в триггере событий следующим образом:
CREATE FUNCTION test_event_trigger_for_drops()
RETURNS event_trigger LANGUAGE plpgsql AS $$
DECLARE
obj record;
BEGIN
FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects()
LOOP
RAISE NOTICE '% dropped object: % %.% %',
tg_tag,
obj.object_type,
obj.schema_name,
obj.object_name,
obj.object_identity;
END LOOP;
END;
$$;
CREATE EVENT TRIGGER test_event_trigger_for_drops
ON sql_drop
EXECUTE FUNCTION test_event_trigger_for_drops();
9.29.3. Обработка события перезаписи таблицы #
Все функции, показанные в Таблица 9.104 предоставляют информацию о таблице, для которой только что было вызвано событие table_rewrite. Если они вызываются в любом другом контексте, возникает ошибка.
Таблица 9.104. Функции информации о перезаписи таблицы
Эти функции могут быть использованы в триггере событий следующим образом:
CREATE FUNCTION test_event_trigger_table_rewrite_oid()
RETURNS event_trigger
LANGUAGE plpgsql AS
$$
BEGIN
RAISE NOTICE 'rewriting table % for reason %',
pg_event_trigger_table_rewrite_oid()::regclass,
pg_event_trigger_table_rewrite_reason();
END;
$$;
CREATE EVENT TRIGGER test_table_rewrite_oid
ON table_rewrite
EXECUTE FUNCTION test_event_trigger_table_rewrite_oid();