единственный способ работы с 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
сессия
артефакты
$ 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. Также можно прочитать версию в машинно-ориентированном виде, обратившись к переменной server_version_num. |
pgpro_version() | text | информация о версии Postgres Pro |