O PostgreSQL fornece estas funções auxiliares para recuperar informações de gatilhos de eventos.
Para obter mais informações sobre gatilhos de eventos, veja o Capítulo 38.
pg_event_trigger_ddl_commands() →setof record
A função pg_event_trigger_ddl_commands retorna
a lista de comandos DDL executados por cada ação
do usuário, quando chamados em uma função anexada a um gatilho de
evento ddl_command_end.
Se a função for chamada em qualquer outro contexto, é gerado um erro.
A função pg_event_trigger_ddl_commands retorna
uma linha para cada comando base executado; alguns comandos que são
uma única sentença SQL podem retornar mais de uma
linha. Essa função retorna as seguintes colunas:
| Nome | Tipo | Descrição |
|---|---|---|
classid | oid | OID do catálogo ao qual o objeto pertence |
objid | oid | OID do próprio objeto |
objsubid | integer | ID do sub-objeto (por exemplo, o número do atributo para uma coluna) |
command_tag | text | Etiqueta do comando |
object_type | text | Tipo do objeto |
schema_name | text |
Nome do esquema ao qual o objeto pertence, se houver; senão
NULL. Nenhuma delimitação é aplicada.
|
object_identity | text | Renderização em texto da identidade do objeto, qualificada pelo esquema. Cada identificador incluído na identidade é delimitado, se for necessário. |
in_extension | boolean | true se o comando fizer parte de um
script de extensão |
command | pg_ddl_command | Uma representação completa do comando, no formato interno. Não pode ser mostrado diretamente, mas pode ser passado para outras funções para obter diferentes informações sobre o comando. |
pg_event_trigger_dropped_objects() →setof record
A função pg_event_trigger_dropped_objects
retorna a lista de todos os objetos descartados pelo comando em
cujo evento sql_drop foi chamado.
Se a função for chamada em qualquer outro contexto, é gerado um erro.
Essa função retorna as seguintes colunas:
| Nome | Tipo | Descrição |
|---|---|---|
classid | oid | OID do catálogo ao qual o objeto pertencia |
objid | oid | OID do próprio objeto |
objsubid | integer | ID do sub-objeto (por exemplo, o número do atributo para uma coluna) |
original | boolean | true se for um dos objetos raiz da
exclusão |
normal | boolean |
true se houver uma relação de dependência
normal no gráfico de dependência que leva a este objeto
|
is_temporary | boolean |
true se este for um objeto temporário
|
object_type | text | Tipo do objeto |
schema_name | text |
Nome do esquema ao qual o objeto pertencia, se houver; senão
NULL. Nenhuma delimitação é aplicada.
|
object_name | text |
Nome do objeto, se a combinação de esquema e nome puder ser
usada como um identificador exclusivo para o objeto;
senão NULL. Nenhuma delimitação é aplicada,
e o nome nunca é qualificado pelo esquema.
|
object_identity | text | Renderização em texto da identidade do objeto, qualificada pelo esquema. Cada identificador incluído na identidade é delimitado, se for necessário. |
address_names | text[] |
Uma matriz que, junto com object_type e
address_args, pode ser usada pela função
pg_get_object_address para recriar o
endereço do objeto em um servidor remoto contendo um objeto
do mesmo tipo de dados com nome idêntico.
|
address_args | text[] |
Complemento para address_names
|
A função pg_event_trigger_dropped_objects
pode ser usada em gatilho de evento desta forma:
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();
As funções mostradas na
Tabela 9.111
fornecem informações sobre uma tabela para a qual o evento
table_rewrite acabou de ser chamado.
Se a função for chamada em qualquer outro contexto, é gerado um erro.
Tabela 9.111. Funções de informação de reescrita de tabela
Estas funções podem ser usadas em gatilho de evento desta forma:
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();