在pg_stat_activity
中,我可以看到客户端正在使用游标处理某些查询结果。但是,我如何才能看到原始查询是什么?
pipeline=> select pid, query from pg_stat_activity where state = 'active' order by query_start;
pid | query
-------+--------------------------------------------------------------------------------------
6734 | FETCH FORWARD 1000 FROM "c_109886590_1"
26731 | select pid, query from pg_stat_activity where state = 'active' order by query_start;
(2 rows)
我看到有pg_cursors
,但它是空的:
pipeline=> select * from pg_cursors;
name | statement | is_holdable | is_binary | is_scrollable | creation_time
------+-----------+-------------+-----------+---------------+---------------
(0 rows)
服务器位于AWS RDS上。
pipeline=> select version();
version
--------------------------------------------------------------------------------------------------------------
PostgreSQL 9.3.3 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2), 64-bit
(1 row)
答案 0 :(得分:7)
你不能。
pg_cursors
是后端本地的。它不会显示不属于当前连接的游标。
PostgreSQL无法找出来自另一个会话的游标的基础。
我能想到的唯一方法是使用log_statement = all
和合适的log_line_prefix
进行日志分析。