我遇到的情况是我有许多“交易中的空闲”连接。一世 自己发现了他们。我可以杀死他们,但这不会阻止他们 从再次发生。事实上,它经常发生。
有没有办法获取以前的SQL语句列表 作为给定交易的一部分执行?
如果我能做到这一点,那么弄清楚它会更容易 行为不端的客户。
答案 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>