Несмотря на то, что это может работать в вашем случае использования на настольном компьютере, обратите внимание, что номера идентификаторов процессов имеют ролловер (32768 - это общий верхний предел), поэтому использование их в качестве уникального ключа для идентификации пользователя может привести к проблемам.Если вам когда-нибудь понадобятся оставшиеся данные из предыдущего сеанса в таблице, которая отслеживает сопоставление пользователя-> процесса, это может привести к конфликту с более новыми соединениями, которым назначен тот же идентификатор процесса после его пролонгации.Для вашего приложения может быть достаточно просто убедиться, что вы агрессивно удаляете старые записи сопоставления, возможно, во время запуска, учитывая то, как вы описали его работу.
Чтобы вообще избежать этой проблемы, вам нужно сделатьключ соединения, который включает дополнительный бит информации, например, когда начался сеанс:
SELECT procpid,backend_start FROM pg_stat_activity WHERE procpid=pg_backend_pid();
. Он должен перебирать все соединения, активные в данный момент для вычисления, поэтому он добавляет немного накладных расходов.,Можно выполнить это несколько эффективнее, начиная с PostgreSQL 8.4:
SELECT procpid,backend_start FROM pg_stat_get_activity(pg_backend_pid());
Но это действительно имеет значение, только если у вас одновременно активно большое количество соединений.