2017-01-26 1 views
0

J'ai une fonction qui est déclenchée pour chaque ligne. Il a des déclarations suivantes:Comment optimiser la fonction pgplsql?

SELECT DocDate 
    FROM Operation 
    WHERE Operation.ID = New.OperationID 
    INTO _DocDate; 

EXECUTE PROCEDURE ChangeSaldo(_DocDate, ...); 

Chaque ligne appartient à table parent Operation où nous récupérons DocDate.
Nous avons besoin d'exécuter ChangeSaldo pour chaque ligne avec sa propre _DocDate
qui est garanti que toutes les lignes appartiennent à une même ligne dans Operation tableau

Will Postgres exécuter cette SELECT pour chaque ligne ou cette déclaration seront mises en cache?
S'il n'est pas mis en cache, est-il possible d'optimiser SELECT afin qu'il ne soit exécuté qu'une seule fois?

+0

ce que vous voulez exécuter la fonction 'ChangeSaldo' à chaque valeur' 'DocDate' dans votre select'? .. S'il vous plaît reformulez –

+0

@VaoTsun Terminé. Rephrased –

+1

Si vous pensez que l'exécution répétée de SELECT est un gaspillage, avec raison, peut-être que cette logique ne devrait pas être dans un déclencheur en premier lieu. –

Répondre

-1

Je prévois de créer stable fonction et y mettre SELECT.
En raison de la nature des fonctions stable le résultat sera mis en mémoire cache

+0

plus tard, je vais étendre la réponse avec l'exemple de fonction après que je l'implémente –