我目前正在尝试在我的应用程序中调试“事务中的空闲”方案。我可以通过查看pg_state_activity找出状态为“idle in transaction”的查询的进程ID和事务开始时间。
select pid,query from pg_stat_activity where state='idle in transaction' OR state='idle'
有没有办法识别在与'idle in transaction'的查询相对应的交易中执行的所有查询的列表
答案 0 :(得分:2)
您是否正在尝试获取事务所运行的所有先前语句的列表,该事务现在在事务中显示为空闲?
如果是这样,在SQL级别上没有简单而安全的方法。您应该使用CSV日志记录模式来分析查询历史记录并将查询分组到事务中。很简单,您可以使用SQL执行此操作,COPY
将CSV放入PostgreSQL表中以便于分析。
或者,使用普通文本日志,并设置包含事务ID和进程ID的log_line_prefix
。
(我可能已经发誓我看到了一个收集查询跟踪的调试扩展,但现在找不到它,我不确定它是否有用,因为你必须在问题连接上运行命令 < / em>提取收集的数据。