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

Hvordan listes alle forberedte udsagn for alle aktive sessioner?

Nix. AFAIK udarbejdede erklæringer er lokale for en backend; andre backends ved bare ikke, at de eksisterer. Du bliver nødt til at ændre serveren for at tilføje yderligere kommunikation mellem processer, så en backend kan spørge de andre om forberedte erklæringer.

Backends så ud til at dele de samme pg_prepared_statements bordopbevaring, som:

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

returnerer den samme relfilenode fra forskellige backends. Jeg var overrasket, da jeg troede, at forberedte udtalelser ikke havde nogen tilstedeværelse på disken. Hvis de var på disk, kunne du vel bruge funktionerne fra pageinspect contrib-modulet at læse de rå tupler eller tabelsider. Synlighed ville være et problem; hvordan ville du vide, hvad der var relateret til en død/afsluttet backend, og hvad der var gyldigt?

Jeg prøvede det og fandt pg_prepared_statements er faktisk en visning:

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

specifikt en visning af pg_prepared_statement() fungere. Så der er ikke noget at undersøge. Det er internt i backend.

Dette virker som en af ​​disse "... men hvorfor ville du gøre det?" spørgsmål, hvilket ofte er et tegn på, at nogen spørger om en løsning de har forestillet sig deres virkelige problem, i stedet for at spørge om deres virkelige problem.

Så:Hvorfor vil du det? Hvad er det egentlige problem, du prøver at løse?




  1. PHP - få data fra databasen sammenlign det med variabel og sorter efter mindre værdi

  2. Vælg de rækker, der lige er indsat

  3. Django selv deltage , Sådan konverteres denne forespørgsel til ORM-forespørgsel

  4. Generer script til både skema og data