sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur listar man alla förberedda uttalanden för alla aktiva sessioner?

Nej. AFAIK förberedda uttalanden är lokala för en backend; andra backends vet helt enkelt inte att de finns. Du skulle behöva modifiera servern för att lägga till ytterligare kommunikation mellan processer så att en backend kan fråga de andra om förberedda uttalanden.

Backenderna verkade initialt dela samma pg_prepared_statements bordsförvaring, som:

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

returnerar samma relfilenod från olika backends. Jag blev förvånad, eftersom jag trodde att förberedda uttalanden inte hade någon närvaro på disken. Om de fanns på disk antar jag att du skulle kunna använda funktionerna från pageinspect contrib-modulen för att läsa de råa tuplarna eller tabellsidorna. Sikten skulle vara ett problem; hur skulle du veta vad som var relaterat till en död/avbruten backend och vad som var giltigt?

Jag försökte det och fann att pg_prepared_statements är faktiskt en vy:

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 vy över pg_prepared_statement() fungera. Så det finns inget att inspektera. Det är internt i backend.

Det här verkar vara en av dessa "... men varför skulle du göra det?" frågor, vilket ofta är ett tecken på att någon frågar om en lösning de har föreställt sig sitt verkliga problem, snarare än att fråga om deras verkliga problem.

Så:Varför vill du det? Vilket är det verkliga problemet du försöker lösa?




  1. Hur man sorterar efter siffror först med Oracle SQL-fråga?

  2. Lägga till en en till många-relation till en självreferensförälder/barn

  3. PDO-undantag slängs inte för triggerfel

  4. Byt namn på Amazon RDS-tabellnamn till versaler