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();