# Возможности

> Возможности PgBouncer: режимы пула и совместимость с SQL

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

- Несколько уровней строгости при перераспределении соединений:

  **Сеансовый режим пула**
  : Наиболее щадящий метод. При подключении клиента ему назначается серверное соединение на всё время клиентского соединения. После отключения клиента серверное соединение возвращается в пул. Этот режим поддерживает все возможности PostgreSQL.

  **Транзакционный режим пула**
  : Серверное соединение назначается клиенту только на время транзакции. Когда PgBouncer определяет завершение транзакции, серверное соединение возвращается в пул. Этот режим нарушает работу некоторых сеансовых возможностей PostgreSQL. Его можно использовать, только если приложение не применяет несовместимые возможности. Они перечислены в таблице ниже.

  **Режим пула на уровне операторов**
  : Наиболее строгий метод. Это транзакционный режим пула с дополнительным ограничением: транзакции из нескольких операторов запрещены. Такой режим принудительно обеспечивает клиентский режим «autocommit» и в основном предназначен для PL/Proxy.

- Низкое потребление памяти (по умолчанию 2 kB на соединение), поскольку PgBouncer не требуется получать пакеты целиком.

- Нет привязки к одному серверу бэкенда. Целевые базы данных могут находиться на разных узлах.

- Для большинства параметров поддерживается изменение конфигурации без остановки обслуживания.

- Поддерживается перезапуск и обновление без остановки обслуживания и разрыва клиентских соединений.

--------

## Совместимость возможностей SQL с режимами пула {#sql-feature-map-for-pooling-modes}

В следующей таблице перечислены возможности PostgreSQL и их совместимость с режимами пула PgBouncer. Обратите внимание: транзакционный режим пула *по своей архитектуре* нарушает ожидания клиента от сервера и может использоваться только в приложениях, которые не применяют несовместимые возможности.

| Возможность                      | Сеансовый режим  | Транзакционный режим   |
|----------------------------------|:----------------:|:---------------------:|
| Параметры запуска [^0]           | Да               |          Да           |
| SET/RESET                        | Да               |        Никогда        |
| LISTEN                           | Да               |        Никогда        |
| NOTIFY                           | Да               |          Да           |
| WITHOUT HOLD CURSOR              | Да               |          Да           |
| WITH HOLD CURSOR                 |       Да         |        Никогда        |
| Подготовленные планы протокола   | Да               |       Да [^1]         |
| PREPARE / DEALLOCATE             | Да               |        Никогда        |
| Временные таблицы ON COMMIT DROP | Да               |          Да           |
| Временные таблицы PRESERVE/DELETE ROWS | Да          |        Никогда        |
| Сброс кэшированного плана        | Да               |          Да           |
| Оператор LOAD                    | Да               |        Никогда        |
| Сеансовые рекомендательные блокировки | Да           |        Никогда        |

[^0]: Параметры запуска: `client_encoding`, `DateStyle`, `IntervalStyle`, `Timezone`, `standard_conforming_strings` и `application_name`. PgBouncer отслеживает их изменения и поэтому может гарантировать согласованные значения для клиента. Если PgBouncer должен поддерживать дополнительные параметры, см. [`track_extra_parameters`](/ru/docs/pgbouncer/config/#track_extra_parameters) и [`ignore_startup_parameters`](/ru/docs/pgbouncer/config/#ignore_startup_parameters).

[^1]: Чтобы включить эту поддержку, параметру [`max_prepared_statements`](/ru/docs/pgbouncer/config/#max_prepared_statements) необходимо присвоить ненулевое значение.
