De topicuitleg kan een beetje abstract zijn, ik heb zelf de databases even niet bij de hand.
Het volgende hebben we: Een database met meerdere tables. De belangrijkste hiervan zijn table A en B. Table B bevat een Foreign Key naar A. Zodra in A iets wordt toegevoegd wordt via een trigger een waarde in B toegevoegd die hoort bij de waarde uit A.
Dit werkt allemaal. Nu komt het echter nogal vaak voor dat er heel vaak dezelfde waarde uit B moet worden gebruikt in een hele rits andere tabellen. Om dit makkelijker te maken hebben we in plpgsql een procedure gemaakt die eerst de waarde in A invoert en dan de waarde uit B die uit de trigger komt toevoegt in C, D, enz.
Wat blijkt nu: deze trigger wordt pas uitgevoerd als de hele functie klaar is. Aan de ene kant is het logisch aangezien de procedure een atomair geheel is, aan de andere kant is het net zo logisch om de trigger deel van de procedure te laten zijn.
We hebben al zitten zoeken naar mogelijkheden om de trigger alvast "af te laten gaan", maar hier lijkt niet zo heel veel over te vinden. Een mogelijke oplossing is om de query van de trigger gewoon zelf even uit te voeren binnen de procedure (en de foutmelding over key die al bestaat als de procedure is afgelopen en de trigger het opnieuw probeert). Zoiets hoort toch ook netter te kunnen?
Het volgende hebben we: Een database met meerdere tables. De belangrijkste hiervan zijn table A en B. Table B bevat een Foreign Key naar A. Zodra in A iets wordt toegevoegd wordt via een trigger een waarde in B toegevoegd die hoort bij de waarde uit A.
Dit werkt allemaal. Nu komt het echter nogal vaak voor dat er heel vaak dezelfde waarde uit B moet worden gebruikt in een hele rits andere tabellen. Om dit makkelijker te maken hebben we in plpgsql een procedure gemaakt die eerst de waarde in A invoert en dan de waarde uit B die uit de trigger komt toevoegt in C, D, enz.
Wat blijkt nu: deze trigger wordt pas uitgevoerd als de hele functie klaar is. Aan de ene kant is het logisch aangezien de procedure een atomair geheel is, aan de andere kant is het net zo logisch om de trigger deel van de procedure te laten zijn.
We hebben al zitten zoeken naar mogelijkheden om de trigger alvast "af te laten gaan", maar hier lijkt niet zo heel veel over te vinden. Een mogelijke oplossing is om de query van de trigger gewoon zelf even uit te voeren binnen de procedure (en de foutmelding over key die al bestaat als de procedure is afgelopen en de trigger het opnieuw probeert). Zoiets hoort toch ook netter te kunnen?