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

Debugging 有没有办法获取以前在PostgreSQL中作为给定事务的一部分执行的SQL语句列表?,debugging,postgresql,transactions,locking,Debugging,Postgresql,Transactions,Locking,我所处的情况是,我有许多“在事务中空闲”的连接。我 我自己发现的。我可以杀了他们,但这不能阻止他们 避免再次发生。事实上,这是有规律的 有没有办法获取以前使用过的SQL语句列表 作为给定事务的一部分执行 如果我能做到这一点,那就更容易找到答案了 行为不端的客户端。基本上-您必须根据执行时间打开所有语句日志记录。实现它的最佳方法是使用值为0的log_min_duration_语句,并使用log_line_前缀,这样它将包含匹配来自同一后端的行所需的信息 我通常使用log_line_前缀=“%m%u

我所处的情况是,我有许多“在事务中空闲”的连接。我 我自己发现的。我可以杀了他们,但这不能阻止他们 避免再次发生。事实上,这是有规律的

有没有办法获取以前使用过的SQL语句列表 作为给定事务的一部分执行

如果我能做到这一点,那就更容易找到答案了
行为不端的客户端。

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

我通常使用log_line_前缀=“%m%u@%d%p%r”


之后,您可以编写一些工具来帮助您在事务中查找空闲,或者您可以使用。

目前正在pgsql黑客邮件列表中的“显示事务中空闲的以前查询字符串”标题下为添加此功能做一些工作。这看起来将是pg_stat_活动将有一个名为“last_query”的新列,其中包含您想要的信息


在这项工作完成并可能在下一个版本中提供之前,depesz的建议可能与您在这里得到的建议一样好——除非您希望在这项功能逐步推出时开始抓取早期修补程序。

这会对性能造成相当大的影响,并且需要随时进行完整的日志记录。如果有一个可以用事务ID调用的函数或系统视图,那么就更容易了。