2014-07-01 20 views
5

In pg_stat_activity kann ich sehen, dass ein Client seinen Weg durch einige Abfrageergebnisse mit einem Cursor arbeitet. Aber wie kann ich sehen, was die ursprüngliche Abfrage ist?Wie aktive Abfrage zugrunde liegenden Cursor anzeigen

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) 

Ich sehe es pg_cursors, aber es ist leer:

pipeline=> select * from pg_cursors; 
name | statement | is_holdable | is_binary | is_scrollable | creation_time 
------+-----------+-------------+-----------+---------------+--------------- 
(0 rows) 

Der Server, auf AWS RDS ist.

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) 

Antwort

6

Sie können nicht.

pg_cursors ist Back-End-lokal. Es zeigt keine Cursor an, die nicht Teil der aktuellen Verbindung sind.

PostgreSQL hat keine Möglichkeit herauszufinden, welche Abfrage einem Cursor aus einer anderen Sitzung zugrunde liegt.

Die einzige Möglichkeit, dies zu tun, ist die Verwendung von Log-Analyse, mit log_statement = all und einem geeigneten log_line_prefix.

Verwandte Themen