sql >> Databáze >  >> RDS >> PostgreSQL

Jak vypsat všechny připravené výpisy pro všechny aktivní relace?

Ani náhodou. Připravené příkazy AFAIK jsou lokální pro backend; ostatní backendy prostě nevědí, že existují. Budete muset upravit server a přidat další meziprocesovou komunikaci, aby se jeden backend mohl zeptat ostatních na připravené příkazy.

Zpočátku se zdálo, že backendy sdílejí stejné pg_prepared_statements úložiště tabulky, jako:

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

vrátí stejný relfilenode z různých backendů. Byl jsem překvapen, protože jsem si myslel, že připravené výpisy nemají na disku žádnou přítomnost. Pokud by byly na disku, myslím, že byste mohli použít funkce z modulu pageinspect contrib pro čtení nezpracovaných n-tic nebo stránek tabulky. Viditelnost by byla problémem; jak byste věděli, co souvisí s mrtvým/ukončeným backendem a co je platné?

Zkusil jsem to a zjistil jsem, že pg_prepared_statements je vlastně pohled:

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

konkrétně pohled na pg_prepared_statement() funkce. Takže není co kontrolovat. Je to interní backend.

Vypadá to jako jedno z těch "... ale proč bys to dělal?" otázky, což je často známka toho, že se někdo ptá na řešení spíše si představovali svůj skutečný problém, než aby se ptali na svůj skutečný problém.

Takže:Proč to chceš? Jaký je skutečný problém, který se snažíte vyřešit?




  1. Jak mohu vytvořit dvě podmínky v klauzuli

  2. Může Alembic automaticky generovat změny sloupců?

  3. .Net Connection Pooling MySQL Dočasná tabulka

  4. jak fungují uložené procedury Oracle (s kurzory)?