Инструменты пользователя

Инструменты сайта


postgres:osnovy:cessija_podkljuchenija

Сессия

единственный способ работы с PostgreSQL. Как бы вы не работали с сервером вы всегда работаете через клиент. Работает через TCP и Unix socket.

Как правило использует библиотеку libpq, но не обязательно. Протокол взаимодействия открыт, для каждого клиентского соединения порождается выделенный серверный процесс. При этом клиентский процесс называют - frontend, а серверный - backend.

$ netstat -a|grep pos
 
tcp        0      0 0.0.0.0:postgresql      0.0.0.0:*               LISTEN 
tcp6       0      0 [::]:postgresql         [::]:*                  LISTEN 
unix  2      [ ACC ]     STREAM     LISTENING     34312    /var/run/postgresql/.s.PGSQL.5432

сессия

В результате каждого подключения к PostgreSQ создается сессия
  • достаточно абстрактное понятие
  • нет никакого идентификатор

артефакты

  • несколько функций возвращающих информацию о сессии: pg_backend_pid(), user
  • таблица системного каталога pg_stat_activity
$ ps -xf
4032 ?        S      0:01 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf
4036 ?        Ss     0:00  \_ postgres: 10/main: checkpointer process 
4037 ?        Ss     0:00  \_ postgres: 10/main: writer process 
4038 ?        Ss     0:00  \_ postgres: 10/main: wal writer process 
4039 ?        Ss     0:01  \_ postgres: 10/main: autovacuum launcher process 
4040 ?        Ss     0:00  \_ postgres: 10/main: stats collector process 
4041 ?        Ss     0:00  \_ postgres: 10/main: bgworker: logical replication launcher 
16986 ?       Ss     0:00  \_ postgres: 10/main: postgres postgres 86.57.255.94(22858) idle

Зайти в консольный клиент postgresql можно коммандой

# psql -Uparser_wb -dparser_wb

Выполним команду и получим код серверного процесса, обслуживающего текущий сеанс

parser_wb=# select pg_backend_pid();
 pg_backend_pid
----------------
            101
(1 row)

Функции получения информации о сеансе

ИмяТип результатаОписание
current_catalognameимя текущей базы данных (в стандарте SQL она называется «каталогом»)
current_database()nameимя текущей базы данных
current_query()textтекст запроса, выполняемого в данный момент, в том виде, в каком его передал клиент (может состоять из нескольких операторов)
current_rolenameсиноним current_user
current_schema[()]nameимя текущей схемы
current_schemas(boolean)name[]имена схем в пути поиска, возможно включая схемы, добавляемые в него неявно
current_usernameимя пользователя в текущем контексте выполнения
inet_client_addr()inetадрес удалённой стороны соединения
inet_client_port()intпорт удалённой стороны соединения
inet_server_addr()inetадрес локальной стороны соединения
inet_server_port()intпорт локальной стороны соединения
pg_backend_pid()intкод серверного процесса, обслуживающего текущий сеанс
pg_conf_load_time()timestamp with time zoneвремя загрузки конфигурации
pg_is_other_temp_schema(oid)booleanявляется ли заданная схема временной в другом сеансе?
pg_listening_channels()setof textимена каналов, по которым текущий сеанс принимает сигналы
pg_my_temp_schema()oidOID временной схемы этого сеанса или 0, если её нет
pg_postmaster_start_time()timestamp with time zoneвремя запуска сервера
pg_trigger_depth()intтекущий уровень вложенности в триггерах Postgres Pro (0, если эта функция вызывается (прямо или косвенно) не из тела триггера)
session_usernameимя пользователя сеанса
usernameсиноним current_user
version()textинформация о версии PostgreSQL. Также можно прочитать версию в машинно-ориентированном виде, обратившись к переменной server_version_num.
pgpro_version()textинформация о версии Postgres Pro
postgres/osnovy/cessija_podkljuchenija.txt · Последние изменения: 2023/01/12 12:18 (внешнее изменение)