PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment lister toutes les déclarations préparées pour toutes les sessions actives ?

Non. Les instructions préparées AFAIK sont locales à un backend ; d'autres backends ne savent tout simplement pas qu'ils existent. Vous auriez besoin de modifier le serveur pour ajouter une communication inter-processus supplémentaire afin de permettre à un backend de demander aux autres des instructions préparées.

Les backends semblaient initialement partager le même pg_prepared_statements stockage de table, comme :

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

renvoie le même relfilenode à partir de différents backends. J'ai été surpris, car je pensais que les déclarations préparées n'avaient aucune présence sur le disque. S'ils étaient sur le disque, je suppose que vous pourriez utiliser les fonctions du module pageinspect contrib pour lire les tuples bruts ou les pages de table. La visibilité serait un problème; comment sauriez-vous ce qui était lié à un backend mort/terminé, et ce qui était valide ?

J'ai essayé cela et j'ai trouvé que pg_prepared_statements est en fait une vue :

regress=# SELECT * FROM heap_page_items(get_raw_page('pg_prepared_statements', 1));
ERROR:  cannot get raw page from view "pg_prepared_statements"

spécifiquement une vue sur pg_prepared_statement() fonction. Il n'y a donc rien à inspecter. C'est interne au backend.

Cela ressemble à l'un de ces "... mais pourquoi feriez-vous cela?" des questions, ce qui est souvent le signe que quelqu'un demande une solution ils ont envisagé leur vrai problème, plutôt que de poser des questions sur leur vrai problème.

Alors :Pourquoi tu veux ça ? Quel est le vrai problème que vous essayez de résoudre ?