PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie listet man alle vorbereiteten Statements für alle aktiven Sitzungen auf?

Nö. AFAIK vorbereitete Anweisungen sind lokal für ein Backend; andere Backends wissen einfach nicht, dass sie existieren. Sie müssten den Server ändern, um zusätzliche Kommunikation zwischen Prozessen hinzuzufügen, damit ein Backend die anderen nach vorbereiteten Anweisungen fragen kann.

Die Backends schienen zunächst die gleichen pg_prepared_statements zu teilen Tabellenspeicher, als:

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

gibt denselben relfilenode von verschiedenen Backends zurück. Ich war überrascht, da ich dachte, dass vorbereitete Anweisungen nicht auf der Festplatte vorhanden sind. Wenn sie auf der Festplatte wären, könnten Sie vermutlich die Funktionen des pageinspect contrib-Moduls verwenden um die rohen Tupel oder Tabellenseiten zu lesen. Sicht wäre ein Problem; Woher wissen Sie, was mit einem toten/beendeten Backend zusammenhängt und was gültig ist?

Ich habe das versucht und festgestellt, dass pg_prepared_statements ist eigentlich eine Ansicht:

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

speziell ein Blick auf das pg_prepared_statement() Funktion. Es gibt also nichts zu prüfen. Es ist Backend-intern.

Das scheint einer dieser "... aber warum würdest du das tun?" Fragen, was oft ein Zeichen dafür ist, dass jemand nach einer Lösung fragt sie haben sich ihr wirkliches Problem vorgestellt, anstatt nach ihrem wirklichen Problem zu fragen.

Also:Warum willst du das? Was ist das eigentliche Problem, das Sie zu lösen versuchen?