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