sql >> Database >  >> RDS >> PostgreSQL

Hoe maak je een lijst van alle voorbereide verklaringen voor alle actieve sessies?

Nee. AFAIK voorbereide verklaringen zijn lokaal voor een backend; andere backends weten gewoon niet dat ze bestaan. U moet de server aanpassen om extra communicatie tussen processen toe te voegen, zodat de ene backend de anderen kan vragen naar voorbereide verklaringen.

De backends leken aanvankelijk dezelfde pg_prepared_statements te delen tafelopslag, zoals:

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

retourneert dezelfde relfilenode van verschillende backends. Ik was verrast, omdat ik dacht dat voorbereide verklaringen niet op de schijf aanwezig waren. Als ze op schijf stonden, denk ik dat je de functies van de pageinspect contrib-module zou kunnen gebruiken om de onbewerkte tuples of tabelpagina's te lezen. Zichtbaarheid zou een probleem zijn; hoe zou je weten wat te maken had met een dode/beëindigde backend en wat geldig was?

Ik heb dat geprobeerd en vond dat pg_prepared_statements is eigenlijk een weergave:

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

specifiek een weergave van de pg_prepared_statement() functie. Er valt dus niets te inspecteren. Het is backend intern.

Dit lijkt een van die "... maar waarom zou je dat doen?" vragen, wat vaak een teken is dat iemand vraagt ​​naar een oplossing ze zich hun echte probleem hebben voorgesteld, in plaats van naar hun echte probleem te vragen.

Dus:waarom wil je dat? Wat is het echte probleem dat je probeert op te lossen?




  1. Winnaarskiezer van PHP Lottery Ticket

  2. TYPO3:Kan ik gegevens ophalen uit een andere database op dezelfde server?

  3. JSON versus seriële array in database

  4. Recordvelden afdrukken in PL/SQL