PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come elencare tutte le dichiarazioni preparate per tutte le sessioni attive?

No. Le dichiarazioni preparate da AFAIK sono locali rispetto a un back-end; altri backend semplicemente non sanno che esistono. Dovresti modificare il server per aggiungere ulteriore comunicazione tra processi per consentire a un back-end di chiedere agli altri le istruzioni preparate.

Inizialmente sembrava che i backend condividessero lo stesso pg_prepared_statements stoccaggio della tabella, come:

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

restituisce lo stesso relfilenode da backend diversi. Sono rimasto sorpreso, poiché pensavo che le dichiarazioni preparate non avessero presenza sul disco. Se fossero su disco, immagino che potresti usare le funzioni del pageinspect contrib module per leggere le tuple grezze o le pagine della tabella. La visibilità sarebbe un problema; come faresti a sapere cosa era correlato a un backend morto/terminato e cosa era valido?

L'ho provato e l'ho trovato pg_prepared_statements è in realtà una vista:

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

in particolare una vista su pg_prepared_statement() funzione. Quindi non c'è niente da ispezionare. È il back-end interno.

Questo sembra uno di quei "... ma perché dovresti farlo?" domande, che spesso è un segno che qualcuno sta chiedendo una soluzione hanno immaginato il loro vero problema, piuttosto che chiedere del loro vero problema.

Quindi:perché lo vuoi? Qual è il vero problema che stai cercando di risolvere?