Re: session id and global storage
Hi, I cant find any function, which tells me something like session
id. Is there something like that? I need it in my AM, because I need
to know, if something which I wrote in file was written in this
current session or previously.How about
select procpid||' '||backend_start from pg_stat_activity;
Yours,
Laurenz AlbeSomething like this would be maybe possible, but this select can
return more rows, when the user is connected with more instances...David Hoksza
You could do this:
SELECT procpid||' '||backend_start
FROM pg_stat_activity
WHERE datname = current_database()
AND usename = session_user
AND client_addr = inet_client_addr()
AND client_port = inet_client_port();
Regards,
Rodrigo
Rodrigo De Leon wrote:
Hi, I cant find any function, which tells me something like session
id. Is there something like that? I need it in my AM, because I need
to know, if something which I wrote in file was written in this
current session or previously.How about
select procpid||' '||backend_start from pg_stat_activity;
Yours,
Laurenz AlbeSomething like this would be maybe possible, but this select can
return more rows, when the user is connected with more instances...You could do this:
SELECT procpid||' '||backend_start
FROM pg_stat_activity
WHERE datname = current_database()
AND usename = session_user
AND client_addr = inet_client_addr()
AND client_port = inet_client_port();
That's pretty roundabout. We already expose (hex coded) pid.starttime as
a session identifier in log_line_prefix (it's the %c escape) so I don't
see any reason not to provide either the same thing directly in a
function, or at least to expose the backend pid.
If you need it in backend C code, the data can be fetched from MyProcPid
and MyProcPort->session_start.tv_sec
cheers
andrew
That's pretty roundabout. We already expose (hex coded) pid.starttime as
a session identifier in log_line_prefix (it's the %c escape) so I don't
see any reason not to provide either the same thing directly in a
function, or at least to expose the backend pid.
That would be nice.
Andrew Dunstan <andrew@dunslane.net> writes:
Rodrigo De Leon wrote:
You could do this:
SELECT procpid||' '||backend_start
FROM pg_stat_activity
WHERE datname = current_database()
AND usename = session_user
AND client_addr = inet_client_addr()
AND client_port = inet_client_port();
That's pretty roundabout.
Indeed. Use pg_backend_pid() instead:
SELECT whatever FROM pg_stat_activity WHERE procpid = pg_backend_pid();
A difficulty with this in existing releases is that pg_stat_activity
lags behind reality, so that you won't see your session listed in it
until you've been connected at least half a second or so. 8.2 won't
have that problem.
regards, tom lane