=====Сессия=====
единственный способ работы с 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_catalog''''|''name''|имя текущей базы данных (в стандарте SQL она называется «каталогом»)|
|''''current_database()''''|''name''|имя текущей базы данных|
|''''current_query()''''|''text''|текст запроса, выполняемого в данный момент, в том виде, в каком его передал клиент (может состоять из нескольких операторов)|
|''''current_role''''|''name''|синоним ''current_user''|
|''''current_schema''%%[(%%)]''|''name''|имя текущей схемы|
|''''current_schemas(''boolean'')''''|''name[]''|имена схем в пути поиска, возможно включая схемы, добавляемые в него неявно|
|''''current_user''''|''name''|имя пользователя в текущем контексте выполнения|
|''''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()''''|''oid''|OID временной схемы этого сеанса или 0, если её нет|
|''''pg_postmaster_start_time()''''|''timestamp with time zone''|время запуска сервера|
|''''pg_trigger_depth()''''|''int''|текущий уровень вложенности в триггерах Postgres Pro (0, если эта функция вызывается (прямо или косвенно) не из тела триггера)|
|''''session_user''''|''name''|имя пользователя сеанса|
|''''user''''|''name''|синоним ''current_user''|
|''''version()''''|''text''|информация о версии PostgreSQL. Также можно прочитать версию в машинно-ориентированном виде, обратившись к переменной [[runtime-config-preset#guc-server-version-num|server_version_num]].|
|''''pgpro_version()''''|''text''|информация о версии Postgres Pro|