A página que descreve as novidades do Postgres 10 menciona “Tabelas de transição para gatilhos”.
Tabelas de transição para gatilhos
Esse recurso torna
AFTER STATEMENT
os gatilhos úteis e de alto desempenho, expondo, conforme apropriado, as linhas antigas e novas às consultas. Antes desse recurso, osAFTER STATEMENT
gatilhos não tinham acesso direto a eles, e as soluções alternativas eram bizantinas e tinham desempenho ruim. Muita lógica de gatilho agora pode ser escrita comoAFTER STATEMENT
, evitando a necessidade de fazer as dispendiosas trocas de contexto em cada linha que os gatilhos FOR EACH ROW exigem.
O que é uma tabela de transição?
Você sabe como existem
OLD
eNEW
variáveis de registro paraFOR EACH ROW
gatilhos?As tabelas de transição são os
FOR EACH STATEMENT
equivalentes. São tabelas com as tuplas antigas e novas, para que seus gatilhos possam ver o que mudou.Eu realmente gosto da explicação de Craig sobre o recurso. A especificação SQL-2011 os define no contexto de um gatilho como "uma coleção de linhas sendo excluídas, inseridas ou substituídas é conhecida como tabela de transição". Uma explicação semelhante é fornecida nos documentos,
Essencialmente, eles disponibilizam todas as alterações da declaração para você, o que é super útil. Para referência, o DDL no gatilho de criação se parece com isso com tabelas de transição
Você pode ver um exemplo aqui , e aqui está um do conjunto de testes ,
Algumas notas adicionais
AFTER
gatilhos.ON CONFLICT
.É importante ressaltar que não é totalmente certo estar disponível no PG 10 . Há muitos problemas em aberto com tabelas de transição . A maioria tem manchas. Há algumas brigas internas que são uma espécie de rotina. Parece que o trabalho pesado foi pego por outra pessoa. O tópico indica que saberemos em breve.Autor respondeu - parece estar indo bem novamente.