Обсуждение: Unique Session ID in PGSQL?
Hi! Is there any function in PGSQL that returns an unique Session identifier of the actual session? For example a Bigint, or GUID, or etc? Can I get the living Session identifiers from PG? We have a little application that uses these infos which are basically came from another database system, and I will port this, but I don't know, how to do in PGSQL... In this app. we associated (stored) the session id to a special field in some tables. We can retreive the living session ids with a system functions. If a session died, these records have become irrelevant - we can delete them. If the session still alive, we don't touch them, only can read the content... I see adv_locks in pg, but because the quantity of locks are pre-determined by the server, I don't choose them. I better like a technic that cannot exhaust the number of persistent elements. Thanks: dd
Hello
2011/5/18 Durumdara <durumdara@gmail.com>:
> Hi!
>
> Is there any function in PGSQL that returns an unique Session
> identifier of the actual session?
> For example a Bigint, or GUID, or etc?
> Can I get the living Session identifiers from PG?
try
postgres=# select pg_backend_pid();
pg_backend_pid
----------------
17327
(1 row)
postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_activity where procpid = pg_backend_pid();
-[ RECORD 1 ]----+-----------------------------------------------------------------
datid | 12835
datname | postgres
procpid | 17327
usesysid | 16384
usename | pavel
application_name | psql
client_addr |
client_hostname |
client_port | -1
backend_start | 2011-05-18 14:46:08.099399+02
xact_start | 2011-05-18 15:08:21.5958+02
query_start | 2011-05-18 15:08:21.5958+02
waiting | f
current_query | select * from pg_stat_activity where procpid =
pg_backend_pid();
Regards
Pavel Stehule
>
> We have a little application that uses these infos which are basically
> came from another database system, and I will port this, but I don't
> know, how to do in PGSQL...
> In this app. we associated (stored) the session id to a special field
> in some tables.
> We can retreive the living session ids with a system functions.
>
> If a session died, these records have become irrelevant - we can
> delete them. If the session still alive, we don't touch them, only can
> read the content...
>
> I see adv_locks in pg, but because the quantity of locks are
> pre-determined by the server, I don't choose them.
> I better like a technic that cannot exhaust the number of persistent elements.
>
> Thanks:
> dd
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>
Pavel Stehule wrote: >> Is there any function in PGSQL that returns an unique Session >> identifier of the actual session? >> For example a Bigint, or GUID, or etc? >> Can I get the living Session identifiers from PG? > > try > > postgres=# select pg_backend_pid(); > pg_backend_pid > ---------------- > 17327 > (1 row) I don't totally understand the intended use, but process IDs have the problem that they will get reused eventually. So if that's not good enough, you can construct a session ID like %c in log_line_prefix with the query found in the documentation: http://www.postgresql.org/docs/current/static/runtime-config-logging.html#GUC-LOG-LINE-PREFIX Yours, Laurenz Albe
On Thu, May 19, 2011 at 4:21 AM, Albe Laurenz <laurenz.albe@wien.gv.at> wrote: > Pavel Stehule wrote: >>> Is there any function in PGSQL that returns an unique Session >>> identifier of the actual session? >>> For example a Bigint, or GUID, or etc? >>> Can I get the living Session identifiers from PG? >> >> try >> >> postgres=# select pg_backend_pid(); >> pg_backend_pid >> ---------------- >> 17327 >> (1 row) > > I don't totally understand the intended use, but process IDs have the > problem that they will get reused eventually. > > So if that's not good enough, you can construct a session ID like > %c in log_line_prefix with the query found in the documentation: no, but pid + backend_start_time *is* enough -- the backend session is generated directly from them. I personally wouldn't use the hex version -- pointless obfuscation -- I would just maintain pid+start time as the session if I wasn't worried about the session being guessed, and a salted digest of those two values if I was. merlin