CREATE EVENT TRIGGER

CREATE EVENT TRIGGER — define um novo gatilho de evento

Sinopse

CREATE EVENT TRIGGER nome
    ON evento
    [ WHEN variável_filtro IN (valor_filtrado [, ... ]) [ AND ... ] ]
    EXECUTE { FUNCTION | PROCEDURE } nome_da_função()

Descrição

O comando CREATE EVENT TRIGGER define um novo gatilho de evento. Sempre que o evento designado ocorrer, e a condição WHEN associada ao gatilho, se houver, for satisfeita, a função de gatilho será executada. Para obter uma introdução geral aos gatilhos de evento, veja o Capítulo 38. O usuário que cria o gatilho de evento torna-se seu dono.

Parâmetros

nome

O nome a ser dado ao novo gatilho. Este nome deve ser único no banco de dados.

evento

O nome do evento que dispara a chamada para a função especificada. Veja Seção 38.1 para obter mais informações sobre nomes de eventos.

variável_filtro

O nome da variável usada para filtrar eventos. Permite restringir o disparo do gatilho a um subconjunto dos casos em que tem suporte. No momento, a única variável_filtro com suporte é TAG.

valor_filtrado

Uma lista de valores para a variável_filtro associada, para os quais o gatilho deve disparar. Para TAG, isto significa uma lista de etiquetas de comando (por exemplo, 'DROP FUNCTION').

nome_da_função

O nome da função fornecida pelo usuário, declarada como não recebendo nenhum argumento, e retornando o tipo de dados event_trigger.

Na sintaxe do comando CREATE EVENT TRIGGER, as palavras-chave FUNCTION e PROCEDURE são equivalentes, mas a função referenciada deve, em qualquer caso, ser uma função, e não um procedimento. O uso da palavra-chave PROCEDURE aqui é histórico e em obsolescência.

Notas

Somente os superusuários podem criar gatilhos de evento.

Os gatilhos de evento são desativados no modo mono-usuário (veja postgres) bem como quando event_triggers está definido como false. Se um gatilho de evento com erro desativar o banco de dados a tal ponto que não se consiga nem mesmo remover o gatilho, o banco de dados deverá ser reiniciado com event_triggers definido como false para desativar temporariamente os gatilhos de evento, ou no modo de mono-usuário, para se conseguir removê-lo.

Exemplos

Proibir a execução de qualquer comando de DDL:

CREATE OR REPLACE FUNCTION abort_any_command()
  RETURNS event_trigger
  LANGUAGE plpgsql
AS $$
BEGIN
  RAISE EXCEPTION 'o comando % está desativado', tg_tag;
END;
$$;

CREATE EVENT TRIGGER abort_ddl ON ddl_command_start
   EXECUTE FUNCTION abort_any_command();

Conformidade

Não existe o comando CREATE EVENT TRIGGER no padrão SQL.

Veja também

ALTER EVENT TRIGGER, DROP EVENT TRIGGER, CREATE FUNCTION