如何列出所有活动会话的所有预准备语句?

Igo*_*yev 7 postgresql prepared-statement database-administration postgresql-9.1

我知道有一种方法可以通过从pg_prepared_statements表中选择所有行来列出当前会话的所有预准备语句,但是有没有办法查看所有活动会话的所有预准备语句?我想我正在寻找类似管理员功能的东西,但我在文档中找不到类似的东西.

Cra*_*ger 6

不.AFAIK准备的声明是后端的本地声明; 其他后端只是不知道它们存在.您需要修改服务器以添加额外的进程间通信,以允许一个后端向其他人询问有关预准备语句的信息.

后端最初似乎共享相同的pg_prepared_statements表存储,如:

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';
Run Code Online (Sandbox Code Playgroud)

从不同的后端返回相同的relfilenode.我很惊讶,因为我认为准备好的声明没有磁盘存在.如果它们在磁盘上,我猜你可以使用pageinspect contrib模块中的函数来读取原始元组或表页面.可见性将是一个问题; 你怎么知道什么与死/后端有关,什么是有效的?

我试过了,发现这pg_prepared_statements实际上是一个观点:

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

特别是关于pg_prepared_statement()功能的视图.所以没有什么可以检查的.它是内部的后端.

这似乎就是其中之一"......但你为什么要那样做?" 问题,这通常表明某人正在询问他们为他们的真正问题设想的解决方案,而不是询问他们真正的问题.

那么:你为什么要那样?你想要解决的真正问题是什么?