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

时间:2012-08-28 12:39:41

标签: postgresql prepared-statement postgresql-9.1 database-administration

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

1 个答案:

答案 0 :(得分:5)

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

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

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

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

我试过了,发现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"

具体是pg_prepared_statement()函数的视图。所以没有什么可以检查的。它是内部的后端。

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

所以:你为什么要这样?你试图解决的真正问题是什么?