Digital Q.DataBase предоставляет следующие вспомогательные функции для получения информации из триггеров событий.
Для получения дополнительных сведений о триггерах событий обратитесь к разделу Глава 5.3.
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, если команда является частью скрипта расширения |
команда | pg_ddl_command | Полное представление команды во внутреннем формате. Данное значение нельзя вывести напрямую, но его можно передать в другие функции для получения различных сведений о данной команде. |
pg_event_trigger_dropped_objects() →setof record
pg_event_trigger_dropped_objects возвращает список всех объектов,
удаленных командой, в рамках события которой sql_drop вызывается данная функция.
При вызове в любом другом контексте генерируется ошибка.
Данная функция возвращает следующие столбцы:
| Имя | Тип | Описание |
|---|---|---|
classid | oid | OID системного каталога, к которому принадлежал объект |
objid | oid | OID самого объекта |
objsubid | integer | Идентификатор подобъекта (например, номер атрибута для столбца) |
исходный | boolean | Возвращает значение True, если объект являлся одним из корневых объектов удаления |
нормальный | 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();
Функции, приведенные в
Таблица 2.6.108
предоставляют информацию о таблице, для которой
table_rewrite только что было вызвано событие.
При вызове в любом другом контексте возникает ошибка.
Таблица 2.6.108. Функции получения информации о перезаписи таблицы
Данные функции можно использовать в триггере событий следующим образом:
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();