Enquanto muitos usos de gatilho envolvem funções de gatilho escritas pelo usuário, o PostgreSQL fornece algumas funções de gatilho nativas que podem ser usadas diretamente em gatilhos definidos pelo usuário. Estas funções estão resumidas na Tabela 9.110. (Existem funções de gatilho nativas adicionais, que implementam restrições de chave estrangeira e restrições de índice adiadas. Estas funções não estão documentados aqui, porque os usuários não precisam usá-las diretamente.)
Para obter mais informações sobre como criar gatilhos, veja CREATE TRIGGER.
Tabela 9.110. Funções de gatilho nativas
Função Descrição Exemplo de uso |
|---|
Suprime operações de atualização “não-faça-nada”. Veja abaixo para obter detalhes.
|
Atualiza automaticamente uma coluna do tipo de dados
|
Atualiza automaticamente uma coluna do tipo de dados
|
A função suppress_redundant_updates_trigger,
quando aplicada como um gatilho no nível de linha
BEFORE UPDATE, impedirá que ocorra qualquer
atualização que não altere realmente os dados na linha.
Isto substitui o comportamento normal que sempre executa a
atualização da linha física, independentemente dos dados terem
sido alterados ou não. (Este comportamento normal faz com que as
atualizações sejam executadas mais rapidamente, já que nenhuma
verificação é necessária, e também é útil em certos casos.)
Idealmente, deve ser evitada a execução de atualizações que não
alteram os dados no registro.
Atualizações redundantes podem custar um tempo desnecessário
considerável, especialmente se houver muitos índices a serem
alterados, e espaço em linhas mortas que eventualmente precisarão
ser limpas.
Entretanto, detectar tais situações pelo código do cliente nem
sempre é fácil, ou mesmo possível, e escrever expressões para
detectá-las pode ser propenso a erros.
Uma alternativa é usar a função
suppress_redundant_updates_trigger,
que vai ignorar as atualizações que não alteram dados.
Entretanto, esta função deve ser usada com cuidado.
O gatilho leva um tempo pequeno, mas não trivial, para cada
registro, portanto, se a maioria dos registros afetados pelas
atualizações realmente mudar, o uso deste gatilho fará com que
as atualizações sejam executadas mais lentamente, em média.
A função suppress_redundant_updates_trigger
pode ser adicionado a uma tabela desta forma:
CREATE TRIGGER z_min_update BEFORE UPDATE ON tablename FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger();
Geralmente é necessário disparar este gatilho por último para cada linha, para que este gatilho não substitua outros gatilhos que possam querer alterar a linha. Tendo em mente que os gatilhos são acionados na ordem alfabética do nome, deve ser escolhido um nome de gatilho que venha após o nome de qualquer outro gatilho que a tabela possa ter. (Daí o prefixo “z” no exemplo.)