9.30. Funções de gatilho de evento #

9.30.1. Captura das modificações no final do comando
9.30.2. Processamento de objetos descartados por comando de DDL
9.30.3. Tratamento de evento de reescrita de tabela

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 Capítulo 38.

9.30.1. Captura das modificações no final do comando #

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:

NomeTipoDescrição
classidoidOID do catálogo ao qual o objeto pertence
objidoidOID do próprio objeto
objsubidintegerID do sub-objeto (por exemplo, o número do atributo para uma coluna)
command_tagtextEtiqueta do comando
object_typetextTipo do objeto
schema_nametext Nome do esquema ao qual o objeto pertence, se houver; senão NULL. Nenhuma delimitação é aplicada.
object_identitytext Renderização em texto da identidade do objeto, qualificada pelo esquema. Cada identificador incluído na identidade é delimitado, se for necessário.
in_extensionbooleantrue se o comando fizer parte de um script de extensão
commandpg_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.

9.30.2. Processamento de objetos descartados por comando de DDL #

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:

NomeTipoDescrição
classidoidOID do catálogo ao qual o objeto pertencia
objidoidOID do próprio objeto
objsubidintegerID do sub-objeto (por exemplo, o número do atributo para uma coluna)
originalbooleantrue se for um dos objetos raiz da exclusão
normalboolean true se houver uma relação de dependência normal no gráfico de dependência que leva a este objeto
is_temporaryboolean true se este for um objeto temporário
object_typetextTipo do objeto
schema_nametext Nome do esquema ao qual o objeto pertencia, se houver; senão NULL. Nenhuma delimitação é aplicada.
object_nametext 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_identitytext Renderização em texto da identidade do objeto, qualificada pelo esquema. Cada identificador incluído na identidade é delimitado, se for necessário.
address_namestext[] 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_argstext[] 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();

9.30.3. Tratamento de evento de reescrita de tabela #

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

Função

Descrição

pg_event_trigger_table_rewrite_oid () → oid

Retorna o OID da tabela prestes a ser reescrita.

pg_event_trigger_table_rewrite_reason () → integer

Retorna um código explicando o(s) motivo(s) para a reescrita. O valor é um bitmap construído a partir dos seguintes valores: 1 (a tabela mudou sua persistência), 2 (o valor padrão de uma coluna foi alterado), 4 (uma coluna possui um novo tipo de dados) e 8 (o método de acesso à tabela foi alterado).


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