有没有办法获取之前作为PostgreSQL中给定事务的一部分执行的SQL语句列表?

时间:2009-08-06 14:28:15

标签: debugging postgresql transactions locking

我遇到的情况是我有许多“交易中的空闲”连接。一世 自己发现了他们。我可以杀死他们,但这不会阻止他们 从再次发生。事实上,它经常发生。

有没有办法获取以前的SQL语句列表 作为给定交易的一部分执行?

如果我能做到这一点,那么弄清楚它会更容易 行为不端的客户。

2 个答案:

答案 0 :(得分:2)

基本上 - 您必须在执行时打开所有语句记录。实现它的最佳方法是使用值为0的log_min_duration_statement,并使用log_line_prefix,这样它将包含匹配来自同一后端的行所需的信息。

我通常使用log_line_prefix ='%m%u @%d%p%r'。

之后你可以编写一些工具来帮助你找到闲置的交易,或者你可以使用mine

答案 1 :(得分:2)

目前正在pgsql-hackers邮件列表上进行一些工作,以便在标题“显示以前的idle-in-transaction查询字符串”标题下添加这种功能。看起来要去的地方是pg_stat_activity将有一个名为“last_query”的新列,其中包含您想要的信息。

直到完成并可能在下一个版本中提供,来自depesz的建议可能就像你要到达这里一样好 - 除非你想开始抓住早期的补丁来处理这个功能,因为它们会逐渐消失。 / p>