Search Postgresql Archives

Re: is there anyway to get the backends IP address from the PID?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 14, 2005 at 02:29:47PM -0600, Tony Caduto wrote:

> Does anyone know if there is a way to get the backends IP address from 
> the PID?

Do you mean the IP address of the backend (the server) or the address
of the client that's using that backend?

PostgreSQL 8.0 will have inet_client_addr() and inet_server_addr()
functions to get the client and backend IP addresses for the current
session, but I'm not aware of a way to get another session's IP
addresses via an SQL query.

> I am using the view pg_stat_activity and it would be nice if it would 
> also display the IP address along with the PID.

That probably wouldn't be hard to add -- consider submitting a patch
or suggesting it to the developers.

> I can see the IP address when I do a ps -ef but it would be nice to be 
> able to get it via a sql command.

A workaround would be to write a function that runs ps, netstat,
lsof, etc., and extracts the IP address from the command's output.
Here's a set-returning plperlu example that works with PostgreSQL
8.0.0rc5 on FreeBSD 4.11:

CREATE TYPE pid_ip AS (
    pid     integer,
    ipaddr  inet
);

CREATE FUNCTION backend_client_ips() RETURNS SETOF pid_ip AS $$
my $psprog = "/bin/ps";
my $rows;

if (open(my $ps, "-|", $psprog, $pid)) {
    while (<$ps>) {
	if (/^\s*(\d+).*postmaster: \S+ \S+ (\d+\.\d+\.\d+\.\d+)/) {
	    push @$rows, {pid => $1, ipaddr => $2};
	}
    }
    close $ps;
} else {
    elog ERROR, "$psprog: $!";
}

return $rows;
$$ LANGUAGE plperlu VOLATILE;


SELECT * FROM backend_client_ips();
  pid  |  ipaddr   
-------+-----------
 78563 | 10.1.0.1
 78566 | 127.0.0.1
 78573 | 10.1.0.2
(3 rows)

SELECT i.ipaddr, a.*
FROM pg_stat_activity AS a
LEFT OUTER JOIN backend_client_ips() AS i ON i.pid = a.procpid;
  ipaddr   | datid | datname | procpid | usesysid | usename | current_query |          query_start          
-----------+-------+---------+---------+----------+---------+---------------+-------------------------------
           | 26492 | test    |   78575 |      100 | mfuhr   | <IDLE>        | 2005-01-15 08:23:51.816278-07
 10.1.0.2  | 26492 | test    |   78573 |      100 | mfuhr   | <IDLE>        | 2005-01-15 08:23:34.224116-07
 10.1.0.1  | 26492 | test    |   78563 |      100 | mfuhr   | <IDLE>        | 2005-01-15 08:23:39.294674-07
 127.0.0.1 | 26492 | test    |   78566 |      100 | mfuhr   | <IDLE>        | 2005-01-15 08:23:14.276227-07
(4 rows)

-- 
Michael Fuhr
http://www.fuhr.org/~mfuhr/

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@xxxxxxxxxxxxxx

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux