PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como listar todas as declarações preparadas para todas as sessões ativas?


Não. As instruções preparadas pelo AFAIK são locais para um back-end; outros back-ends simplesmente não sabem que eles existem. Você precisaria modificar o servidor para adicionar comunicação adicional entre processos para permitir que um back-end pergunte aos outros sobre instruções preparadas.

Os back-ends inicialmente pareciam compartilhar as mesmas pg_prepared_statements armazenamento de mesa, como:
SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

retorna o mesmo relfilenode de diferentes back-ends. Fiquei surpreso, pois pensei que as declarações preparadas não tivessem presença no disco. Se eles estivessem em disco, acho que você poderia usar as funções do módulo pageinspect contrib para ler as tuplas brutas ou páginas da tabela. A visibilidade seria um problema; como você saberia o que estava relacionado a um back-end morto/terminado e o que era válido?

Eu tentei isso e descobri que pg_prepared_statements é na verdade uma visão:
regress=# SELECT * FROM heap_page_items(get_raw_page('pg_prepared_statements', 1));
ERROR:  cannot get raw page from view "pg_prepared_statements"

especificamente uma visão sobre o pg_prepared_statement() função. Então não há nada para inspecionar. É back-end interno.

Isso parece um daqueles "... mas por que você faria isso?" perguntas, o que geralmente é um sinal de que alguém está perguntando sobre uma solução eles imaginaram seu problema real, em vez de perguntar sobre seu problema real.

Então:Por que você quer isso? Qual é o verdadeiro problema que você está tentando resolver?