Question

J'ai actuellement une fonction dans PostgreSQL qui crée un tableau temporaire, le remplit, effectue des résultats de sélection et de renvoie délicats. Les tables temporaires de PostgreSQL sont locales aux fonctions, ce qui m'aide donc à éviter d'introduire une autre colonne à ma table temporaire pour marquer toutes les lignes insérées par une exécution particulière de la fonction. Si j'utilisais un tableau mondial qui serait nécessaire, et en raison de la nature de mes requêtes, cela tuerait des performances.

Je veux porter ce morceau de code sur Voltdb, mais il ne prend pas en charge la création de tables temporaires à partir de procédures stockées. Cela m'a fait penser à d'autres approches. Si une procédure stockée démarrait une transaction et supprime toutes les lignes dans un tableau (pas temp), qu'arriverait-il aux autres exécutions de la même procédure stockée en cours d'exécution à ce moment?

Ou si après la suppression, la procédure stockée commence à insérer des lignes, et une autre session invoque le même SP, qui voudra supprimer à nouveau toutes les lignes, quoi alors?

En bref, puis-je créer une vue locale (à exécution SP) des données dans une transaction en supprimant toutes les lignes, en insérant certaines lignes, puis en effectuant des requêtes sur les lignes insérées, puis en supprimant à nouveau toutes les lignes avant la fin de l'exécution SP (et la transaction s'engage )?

Cela me permettrait d'éviter d'utiliser une colonne Rowset_id pour les lignes temporaires, en évitant les jointures beaucoup plus lentes (il s'agit d'une implémentation EAV).

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top