summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Treat2013-05-24 22:01:19 +0000
committerRobert Treat2013-05-24 22:01:19 +0000
commit974abee83d88534339c2aa77137c2a89993dc06e (patch)
treea8976327d3b0d3fdf7a7b037a1067acc1cb67df5
parent7ab9c747256c143e5e1c7ed0406207abedb82f0d (diff)
Make process screen report information in a way that makes sense in postgres 9.2
Also add in the waiting option, making it work back to at least 8.1
-rwxr-xr-xclasses/database/Postgres.php6
-rw-r--r--classes/database/Postgres81.php24
-rwxr-xr-xdatabase.php4
-rw-r--r--lang/english.php1
4 files changed, 33 insertions, 2 deletions
diff --git a/classes/database/Postgres.php b/classes/database/Postgres.php
index cba4cd6e..73ea2af8 100755
--- a/classes/database/Postgres.php
+++ b/classes/database/Postgres.php
@@ -7198,12 +7198,14 @@ class Postgres extends ADODB_base {
*/
function getProcesses($database = null) {
if ($database === null)
- $sql = "SELECT datname, usename, pid, query, query_start
+ $sql = "SELECT datname, usename, pid, waiting, state_change as query_start,
+ case when state='idle in transaction' then '<IDLE> in transaction' when state = 'idle' then '<IDLE>' else query end as query
FROM pg_catalog.pg_stat_activity
ORDER BY datname, usename, pid";
else {
$this->clean($database);
- $sql = "SELECT datname, usename, pid, query, query_start
+ $sql = "SELECT datname, usename, pid, waiting, state_change as query_start,
+ case when state='idle in transaction' then '<IDLE> in transaction' when state = 'idle' then '<IDLE>' else query end as query
FROM pg_catalog.pg_stat_activity
WHERE datname='{$database}'
ORDER BY usename, pid";
diff --git a/classes/database/Postgres81.php b/classes/database/Postgres81.php
index f3ec6d18..70d40b82 100644
--- a/classes/database/Postgres81.php
+++ b/classes/database/Postgres81.php
@@ -226,6 +226,30 @@ class Postgres81 extends Postgres82 {
return $status;
}
+ /**
+ * Returns all available process information.
+ * @param $database (optional) Find only connections to specified database
+ * @return A recordset
+ */
+ function getProcesses($database = null) {
+ if ($database === null)
+ $sql = "SELECT datname, usename, procpid AS pid, current_query AS query, query_start,
+ case when (select count(*) from pg_locks where pid=pg_stat_activity.procpid and granted is false) > 0 then 't' else 'f' end as waiting
+ FROM pg_catalog.pg_stat_activity
+ ORDER BY datname, usename, procpid";
+ else {
+ $this->clean($database);
+ $sql = "SELECT datname, usename, procpid AS pid, current_query AS query, query_start
+ case when (select count(*) from pg_locks where pid=pg_stat_activity.procpid and granted is false) > 0 then 't' else 'f' end as waiting
+ FROM pg_catalog.pg_stat_activity
+ WHERE datname='{$database}'
+ ORDER BY usename, procpid";
+ }
+
+ $rc = $this->selectSet($sql);
+
+ return $rc;
+ }
// Tablespace functions
diff --git a/database.php b/database.php
index bb22ab52..db45594f 100755
--- a/database.php
+++ b/database.php
@@ -445,6 +445,10 @@
'title' => $lang['strprocess'],
'field' => field('pid'),
),
+ 'blocked' => array(
+ 'title' => $lang['strblocked'],
+ 'field' => field('waiting'),
+ ),
'query' => array(
'title' => $lang['strsql'],
'field' => field('query'),
diff --git a/lang/english.php b/lang/english.php
index 7f1e7e79..c232a752 100644
--- a/lang/english.php
+++ b/lang/english.php
@@ -126,6 +126,7 @@
$lang['strvariables'] = 'Variables';
$lang['strprocess'] = 'Process';
$lang['strprocesses'] = 'Processes';
+ $lang['strblocked'] = 'Blocked';
$lang['strsetting'] = 'Setting';
$lang['streditsql'] = 'Edit SQL';
$lang['strruntime'] = 'Total runtime: %s ms';