53.2. Как устанавливаются соединения
Postgres Pro реализует простую клиент-серверную модель по схеме «процесс для пользователя». В такой схеме один клиентский процесс подключается к одному отдельному серверному процессу. Так как мы не знаем заранее, сколько подключений будет, нам нужен главный процесс, который будет запускать новый процесс при каждом запросе подключения. Главный процесс называется postgres
и принимает входящие подключения в заданном порту TCP/IP. Получив запрос на подключение, процесс postgres
порождает новый серверный процесс. Серверные задачи взаимодействуют между собой через семафоры и разделяемую память, чтобы обеспечить целостность данных при одновременном обращении к ним.
Клиентским процессом может быть любая программа, которая понимает протокол Postgres Pro, описанный в Главе 55. Многие клиенты базируются на библиотеке libpq для языка C, но есть и другие независимые реализации этого протокола, например, драйвер JDBC для Java.
Установив подключение, клиентский процесс может передать запрос серверу. Запрос передаётся в обычном текстовом виде, клиент не занимается его анализом. Сервер разбирает запрос, строит план выполнения, выполняет его и возвращает полученные строки клиенту, передавая их через установленное подключение.
12.11. Limitations
The current limitations of Postgres Pro's text search features are:
The length of each lexeme must be less than 2K bytes
The length of a
tsvector
(lexemes + positions) must be less than 1 megabyteThe number of lexemes must be less than 264
Position values in
tsvector
must be greater than 0 and no more than 16,383The match distance in a
<
(FOLLOWED BY)N
>tsquery
operator cannot be more than 16,384No more than 256 positions per lexeme
The number of nodes (lexemes + operators) in a
tsquery
must be less than 32,768
For comparison, the PostgreSQL 8.1 documentation contained 10,441 unique words, a total of 335,420 words, and the most frequent word “postgresql” was mentioned 6,127 times in 655 documents.
Another example — the PostgreSQL mailing list archives contained 910,989 unique words with 57,491,343 lexemes in 461,020 messages.