From 34bb97a4c244c44d1a7bfb5b960ac2c5fad0e001 Mon Sep 17 00:00:00 2001 From: "David E. Wheeler" Date: Wed, 12 Sep 2012 14:41:30 -0700 Subject: [PATCH] The pg_stat_activity PID column name has changed on 9.2. So detect if we're on 9.2 or higher, and use the new name, `pid`. Still use the old name, `procpid`, for older versions of PostgreSQL. --- Bucardo.pm | 6 ++++-- t/BucardoTesting.pm | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Bucardo.pm b/Bucardo.pm index 9e7e855ab..6bb6ef657 100644 --- a/Bucardo.pm +++ b/Bucardo.pm @@ -6773,7 +6773,8 @@ sub terminate_old_goats { } ## Use pg_stat_activity to find a match, then terminate it - $SQL = 'SELECT 1 FROM pg_stat_activity WHERE procpid = ? AND query_start = ?'; + my $pidcol = $maindbh->{pg_server_version} >= 90200 ? 'pid' : 'procpid'; + $SQL = "SELECT 1 FROM pg_stat_activity WHERE $pidcol = ? AND query_start = ?"; my $SQLC = 'SELECT pg_cancel_backend(?)'; my $total = 0; for my $dbname (sort keys %{ $self->{sdb} }) { @@ -7335,6 +7336,7 @@ sub get_deadlock_details { ? 'clock_timestamp()' : 'timeofday()::timestamptz'; ## Fetch information about the conflicting process + my $pidcol = $dldbh->{pg_server_version} >= 90200 ? 'pid' : 'procpid'; my $queryinfo =$dldbh->prepare(qq{ SELECT current_query AS query, @@ -7350,7 +7352,7 @@ SELECT CASE WHEN client_port <= 0 THEN 0 ELSE client_port END AS port, usename AS user FROM pg_stat_activity -WHERE procpid = ? +WHERE $pidcol = ? }); $queryinfo->execute($process); my $q = $queryinfo->fetchall_arrayref({})->[0]; diff --git a/t/BucardoTesting.pm b/t/BucardoTesting.pm index 6d29065ae..5e66d5617 100644 --- a/t/BucardoTesting.pm +++ b/t/BucardoTesting.pm @@ -1019,7 +1019,8 @@ sub setup_bucardo { my $dbh = $self->connect_database($clustername, 'postgres'); if (database_exists($dbh,'bucardo')) { ## Kick off all other people - $SQL = q{SELECT procpid FROM pg_stat_activity WHERE datname = 'bucardo' and procpid <> pg_backend_pid()}; + my $pidcol = $dbh->{pg_server_version} >= 90200 ? 'pid' : 'procpid'; + $SQL = qq{SELECT $pidcol FROM pg_stat_activity WHERE datname = 'bucardo' and $pidcol <> pg_backend_pid()}; for my $row (@{$dbh->selectall_arrayref($SQL)}) { my $pid = $row->[0]; $SQL = 'SELECT pg_terminate_backend(?)'; -- 2.39.5