9

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

4

1 回答 1

7

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

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

SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';

从不同的后端返回相同的 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"

特别是对该pg_prepared_statement()功能的看法。所以没有什么可以检查的。它是内部的后端。

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

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

于 2012-08-28T13:19:39.353 回答