51.2. Как устанавливаются соединения
PostgreSQL реализует простую клиент-серверную модель по схеме «процесс для пользователя». В такой схеме один клиентский процесс подключается к одному отдельному серверному процессу. Так как мы не знаем заранее, сколько подключений будет, нам нужен главный процесс, который будет запускать новый процесс при каждом запросе подключения. Главный процесс называется postgres
и принимает входящие подключения в заданном порту TCP/IP. Получив запрос на подключение, процесс postgres
порождает новый серверный процесс. Серверные задачи взаимодействуют между собой через семафоры и разделяемую память, чтобы обеспечить целостность данных при одновременном обращении к ним.
Клиентским процессом может быть любая программа, которая понимает протокол PostgreSQL, описанный в Главе 53. Многие клиенты базируются на библиотеке libpq для языка C, но есть и другие независимые реализации этого протокола, например, драйвер JDBC для Java.
Установив подключение, клиентский процесс может передать запрос серверу. Запрос передаётся в обычном текстовом виде, клиент не занимается его анализом. Сервер разбирает запрос, строит план выполнения, выполняет его и возвращает полученные строки клиенту, передавая их через установленное подключение.