Функции триггеров событий
QHB предоставляет данные вспомогательные функции для извлечения информации из триггеров событий.
Дополнительную информацию о триггерах событий см. в главе Триггеры событий.
Сбор изменений в конце команды
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 | Полное представление команды, во внутреннем формате. Оно не может выводиться напрямую, но может быть передано другим функциям для получения различной информации о команде. |
Обработка объектов, удаленных командой DDL
pg_event_trigger_dropped_objects () → setof record
Функция pg_event_trigger_dropped_objects возвращает список всех объектов, удаленных командой, для которой вызывается событие sql_drop. Если она вызывается в любом другом контексте, возникает ошибка. Функция pg_event_trigger_dropped_objects возвращает следующие столбцы:
Имя | Тип | Описание |
---|---|---|
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();
Обработка события перезаписи таблицы
Функции, приведенные в Таблице 101, предоставляют информацию о таблице, для которой только что было вызвано событие table_rewrite. Если они вызываются в любом другом контексте, возникает ошибка.
Таблица 101. Функции для получения информации о перезаписи таблицы
Функция |
||
---|---|---|
Описание |
||
pg_event_trigger_table_rewrite_oid () → oid | ||
Возвращает OID таблицы, которая будет перезаписана. | ||
pg_event_trigger_table_rewrite_reason () → integer | ||
Возвращает код, объясняющий причину(ы) перезаписи. Конкретные значения кодов зависят от версии сервера. |
Эти функции можно использовать в триггере событий следующим образом:
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();