diff options
author | glynastill | 2015-06-23 13:45:25 +0000 |
---|---|---|
committer | glyn | 2016-06-07 11:13:38 +0000 |
commit | 3e5f5f7fbc5b56695e316ed42bec65e7d15715d5 (patch) | |
tree | 58e25af0813cdd99fcecf9e9df6c5afa07eee685 /check_postgres.pl | |
parent | c1e1aeb66abc6957ce5f5071b9da10022bc2ddc2 (diff) |
Fix USERWHERECLAUSE broken when changing pg_user references to pg_role
Diffstat (limited to 'check_postgres.pl')
-rwxr-xr-x | check_postgres.pl | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/check_postgres.pl b/check_postgres.pl index 2ac925f7d..c726d10a5 100755 --- a/check_postgres.pl +++ b/check_postgres.pl @@ -981,7 +981,7 @@ my %catalog_info = ( user => { SQL => q{ -SELECT *, usename AS name, quote_ident(usename) AS safeusename +SELECT *, usename AS name, quote_ident(usename) AS saferolname FROM pg_user}, deletecols => [ qw{ passwd } ], }, @@ -2120,10 +2120,10 @@ if ($opt{includeuser}) { my $safename; if (1 == keys %userlist) { ($safename = each %userlist) =~ s/'/''/g; - $USERWHERECLAUSE = " AND usename = '$safename'"; + $USERWHERECLAUSE = " AND rolname = '$safename'"; } else { - $USERWHERECLAUSE = ' AND usename IN ('; + $USERWHERECLAUSE = ' AND rolname IN ('; for my $user (sort keys %userlist) { ($safename = $user) =~ s/'/''/g; $USERWHERECLAUSE .= "'$safename',"; @@ -2142,10 +2142,10 @@ elsif ($opt{excludeuser}) { my $safename; if (1 == keys %userlist) { ($safename = each %userlist) =~ s/'/''/g; - $USERWHERECLAUSE = " AND usename <> '$safename'"; + $USERWHERECLAUSE = " AND rolname <> '$safename'"; } else { - $USERWHERECLAUSE = ' AND usename NOT IN ('; + $USERWHERECLAUSE = ' AND rolname NOT IN ('; for my $user (sort keys %userlist) { ($safename = $user) =~ s/'/''/g; $USERWHERECLAUSE .= "'$safename',"; @@ -4240,7 +4240,7 @@ sub check_commitratio { SELECT round(100.*sd.xact_commit/(sd.xact_commit+sd.xact_rollback), 2) AS dcommitratio, d.datname, - r.rolname AS usename + r.rolname AS rolname FROM pg_stat_database sd JOIN pg_database d ON (d.oid=sd.datid) JOIN pg_roles r ON (r.oid=d.datdba) @@ -4455,7 +4455,7 @@ sub check_database_size { SELECT pg_database_size(d.oid) AS dsize, pg_size_pretty(pg_database_size(d.oid)) AS pdsize, datname, - r.rolname AS usename + r.rolname AS rolname FROM pg_database d LEFT JOIN pg_roles r ON (r.oid=d.datdba)$USERWHERECLAUSE }; @@ -4964,7 +4964,7 @@ sub check_hitratio { SELECT round(100.*sd.blks_hit/(sd.blks_read+sd.blks_hit), 2) AS dhitratio, d.datname, - r.rolname AS usename + r.rolname AS rolname FROM pg_stat_database sd JOIN pg_database d ON (d.oid=sd.datid) JOIN pg_roles r ON (r.oid=d.datdba) @@ -6825,7 +6825,7 @@ sub check_same_schema { ## Map the oid back to the user, for ease later on for my $row (values %{ $dbinfo->{user} }) { - $dbinfo->{useroid}{$row->{usesysid}} = $row->{usename}; + $dbinfo->{useroid}{$row->{usesysid}} = $row->{rolname}; } $thing{$x} = $dbinfo; @@ -7991,6 +7991,8 @@ sub check_txn_idle { qq{COALESCE(ROUND(EXTRACT(epoch FROM now()-$start)),0) AS seconds }. qq{FROM pg_stat_activity WHERE ($clause)$USERWHERECLAUSE }. q{ORDER BY xact_start, query_start, procpid DESC}; + # Handle usename /rolname differences + $SQL =~ s/rolname/usename/; ## Craft an alternate version for old servers that do not have the xact_start column: ($SQL2 = $SQL) =~ s/xact_start/query_start AS xact_start/; $SQL2 =~ s/BY xact_start,/BY/; @@ -8001,6 +8003,9 @@ sub check_txn_idle { qq{COALESCE(ROUND(EXTRACT(epoch FROM now()-$start)),0) AS seconds }. qq{FROM pg_stat_activity WHERE ($clause)$USERWHERECLAUSE }. q{ORDER BY query_start, procpid DESC}; + # Handle usename /rolname differences + $SQL =~ s/rolname/usename/; + $SQL2 =~ s/rolname/usename/; } ## Craft an alternate version for new servers which do not have procpid and current_query is split @@ -8095,7 +8100,7 @@ sub check_txn_idle { $whodunit = sprintf q{%s:%s %s:%s %s:%s%s%s %s:%s}, msg('PID'), $maxr->{pid}, msg('database'), $maxr->{datname}, - msg('username'), $maxr->{usename}, + msg('username'), $maxr->{rolname}, $maxr->{client_addr} eq '' ? '' : (sprintf ' %s:%s', msg('address'), $maxr->{client_addr}), ($maxr->{client_port} eq '' or $maxr->{client_port} < 1) ? '' : (sprintf ' %s:%s', msg('port'), $maxr->{client_port}), |