Esta seção descreve os detalhes de baixo nível da interface com a função de gatilho. Estas informações somente são necessárias para se escrever funções de gatilho em C. Se estiver sendo utilizada uma linguagem de nível mais alto, então estes detalhes são tratados para você. A documentação de cada linguagem procedural explica como escrever gatilhos nesta linguagem.
A função de gatilho deve utilizar a interface de gerência de função "versão 1".
Quando uma função é chamada pelo gerenciador de gatilho não é passado nenhum argumento normal, mas é passado um ponteiro de "contexto" apontando para a estrutura TriggerData. As funções em C podem verificar se foram chamadas pelo gerenciador de gatilhos executando a macro
CALLED_AS_TRIGGER(fcinfo)
que expande para
((fcinfo)->context != NULL && IsA((fcinfo)->context, TriggerData))
Se retornar verdade, então é seguro converter fcinfo->context no tipo TriggerData * e fazer uso da estrutura TriggerData apontada. A função não deve alterar a estrutura de TriggerData ou de qualquer dado apontado por esta.
A struct TriggerData está definida em commands/trigger.h:
typedef struct TriggerData { NodeTag type; TriggerEvent tg_event; Relation tg_relation; HeapTuple tg_trigtuple; HeapTuple tg_newtuple; Trigger *tg_trigger; } TriggerData;
onde os membros estão definidos conforme mostrado abaixo:
typedef struct Trigger { Oid tgoid; char *tgname; Oid tgfoid; int16 tgtype; bool tgenabled; bool tgisconstraint; Oid tgconstrrelid; bool tgdeferrable; bool tginitdeferred; int16 tgnargs; int16 tgattr[FUNC_MAX_ARGS]; char **tgargs; } Trigger;onde tgname é o nome do gatilho, tgnargs é o número de argumentos em tgargs, e tgargs é uma matriz de ponteiros para os argumentos especificados na declaração CREATE TRIGGER. Os outros membros são para uso interno apenas.
Uma função de gatilho deve retornar um ponteiro para HeapTuple ou um ponteiro NULL. Deve-se tomar o cuidado de retornar tg_trigtuple ou tg_newtuple, conforme seja apropriado, se não for desejado modificar a linha onde está sendo realizada a operação.