=====Сессия===== единственный способ работы с 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|