Dans Postgres, comment obtenir une liste des points de sauvegarde définis actuellement?

13

J'utilise postgres SAVEPOINT qui crée un nouveau point de sauvegarde dans la transaction en cours et souhaite afficher la liste des points de sauvegarde actuellement définis dans une connexion.

Pour être plus précis: je voudrais vérifier quel nom ne déclencherait PAS l'erreur "no such savepoint" dans une connexion.

vaab
la source

Réponses:

8

Question interessante! Réponse courte: non .

Réponse longue: il ne semble pas exister de moyen existant pour obtenir une liste de points de sauvegarde définis. Pire encore, il ne semble pas possible de créer une extension PostgreSQL qui vous permettrait de faire ceci: en regardant src / backend / access / transam / xact.c , vous pouvez voir que des fonctions comme RollbackToSavepoint (qui est l'endroit où "aucune savepoint "du message d’erreur dont vous avez parlé provient de la variable CurrentTransactionState, qui est déclarée statique pour xact.c, c’est-à-dire qui ne serait pas visible globalement au code d’extension.

Maintenant, si vous osiez et que vous vouliez désespérément générer une liste de points de sauvegarde définis du côté serveur (au lieu de simplement vous souvenir de votre client ...), vous pourriez ajouter une fonction d'aide à xact.c qui afficherait ceci informations pour vous. En fait, voici juste un tel patch . C'est un correctif très approximatif à des fins d'illustration uniquement, et ne fait qu'éloger les noms des points de sauvegarde, il devrait vraiment renvoyer ces noms sous forme de texte.

Quant à savoir pourquoi cette fonctionnalité est manquante, je suppose qu'il n'y a tout simplement pas de cas d'utilisation plausible pour un client ayant besoin de récupérer une liste de points de sauvegarde définis sur le serveur. Que ferait le client avec cette liste - il suffit d'en choisir une au hasard et ROLLBACKpour elle? ROLLBACKau dernier aveuglément? Les points de sauvegarde AFAICT ne sont utiles que si un client se souvient des points de sauvegarde qu'il a définis et où ils se trouvaient pour pouvoir les utiliser.

Josh Kupershmidt
la source
Merci pour cette réponse. Le client doit se souvenir bien sûr, mais en cas d'accès multi-thread compliqué à une connexion, cela serait utile pour déboguer le code client! Et plus d'informations éventuellement accessibles est souvent mieux que moins à mon humble avis.
vaab
Oui, pour exécuter du code, cela n'a aucun sens. Mais pour le débogage, il serait utile de voir quels points de sauvegarde sont ouverts. Merci pour votre réponse.
guettli