[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for Sharded PostgreSQL](../index.md) > Вопросы и ответы > Подключение

# Подключение к кластеру Managed Service for Sharded PostgreSQL

* [Как подключиться к роутеру?](#how-to-connect-to-router)

* [Как подключиться к консоли администратора Sharded PostgreSQL?](#how-to-connect-to-admin-console)

* [Что такое сессионный и транзакционный режимы?](#session-vs-transaction-modes)

* [Как получить статистику и состояние подключений?](#connections-monitoring)

* [Как настроить подключение приложения к Sharded PostgreSQL?](#how-to-connect-app-to-spqr)

* [Какие опции есть для управления маршрутизацией соединений?](#connection-routing-management)

#### Как подключиться к роутеру? {#how-to-connect-to-router}

Вы можете подключиться к роутеру в кластере Managed Service for Sharded PostgreSQL с помощью клиента PostgreSQL. Для этого выполните команду:

```bash
psql "host=<FQDN_хоста> \
      port=6432 \
      sslmode=verify-full \
      dbname=<имя_БД> \
      user=<имя_пользователя> \
      target_session_attrs=read-write"
```

Где `target_session_attrs` определяет тип запроса к хосту. Например, значение `read-write` дает возможность чтения и записи. Подробнее читайте в [документации SPQR](https://docs.pg-sharding.tech/routing/hints#__spqr__target_session_attrs).

После выполнения команды введите пароль пользователя для завершения процедуры подключения.

#### Как подключиться к консоли администратора Sharded PostgreSQL? {#how-to-connect-to-admin-console}

Используйте порт `6432`, пользователя `spqr-console` и БД `spqr-console`. Пример:

```bash
psql "host=<FQDN_роутера> port=6432 user=spqr-console dbname=spqr-console sslmode=verify-full"
```

#### Что такое сессионный и транзакционный режимы? {#session-vs-transaction-modes}

В сессионном режиме клиентское соединение устанавливается при первом запросе к базе данных и поддерживается до тех пор, пока клиент не разорвет сессию. Затем это соединение может быть использовано другим или этим же клиентом. Такой подход позволяет хорошо переживать момент установления большого количества клиентских соединений к СУБД (например, при старте приложений, обращающихся к базам данных), но является менее производительным, чем транзакционный режим.

В транзакционном режиме клиентское соединение устанавливается при первом запросе к базе данных и поддерживается до завершения транзакции. Затем это соединение может быть использовано другим или этим же клиентом. Такой подход позволяет поддерживать небольшое количество серверных соединений между менеджером подключений и хостами PostgreSQL при большом количестве клиентских соединений.

Транзакционный режим обеспечивает высокую производительность и позволяет максимально эффективно нагрузить СУБД, но в нем недоступно использование:

* временных таблиц ([temporary tables](https://www.postgresql.org/docs/current/sql-createtable.html)), курсоров ([cursors](https://www.postgresql.org/docs/current/plpgsql-cursors.html)) и рекомендательных блокировок ([advisory locks](https://www.postgresql.org/docs/current/explicit-locking.html#ADVISORY-LOCKS)), которые существуют дольше одной транзакции;

* подготовленных выражений ([prepared statements](https://www.postgresql.org/docs/current/sql-prepare.html)).

Настройка режима производится в параметре `pool_mode` в конфигурации роутера. По умолчанию включен транзакционный режим.

#### Как получить статистику и состояние подключений? {#connections-monitoring}
Роутер предоставляет административную консоль по протоколу PostgreSQL. В консоли доступны команды `SHOW` для получения статистики, например:

* `SHOW clients WHERE dbname = <имя_базы_данных>;` — отображает список клиентов, маршрут, адрес роутера и состояние соединения.
* `SHOW shards` — выводит список шардов.
* `SHOW backend_connections` — выводит список подключений к хостам шардов.

#### Как настроить подключение приложения к Sharded PostgreSQL? {#how-to-connect-app-to-spqr}

Для подключения из приложений используйте стандартные PostgreSQL-драйверы (например, pgx). В конфигурации укажите все роутеры кластера. Убедитесь, что группы безопасности кластера разрешают подключение к нему.

Для сложных запросов (например, с CTE) используйте виртуальный параметр `/* __spqr__engine_v2: true */`. Виртуальные параметры можно задавать комментариями в SQL или через `SET`. Подробнее о виртуальных параметрах читайте в [документации SPQR](https://docs.pg-sharding.tech/routing/hints#__spqr__target_session_attrs).

#### Какие опции есть для управления маршрутизацией соединений? {#connection-routing-management}

Управлять можно только типом запроса к хосту. Для этого используйте виртуальный параметр `/*__spqr__target_session_attrs */` или параметр `target_session_attrs` и укажите в нем желаемый тип запроса: `read-write`, `smart-read-write`, `read-only`, `prefer-standby` или `any`. 

Тип запроса влияет на поведение кластера при обработке запроса. Например, `read-only` позволяет подключаться только к репликам, `prefer-standby` выбирает реплику и переключается на мастер при отсутствии реплик. Это полезно при наличии нескольких серверов и автоматическом переключении мастера. Подробнее о типах запросов в [документации SPQR](https://docs.pg-sharding.tech/routing/hints#__spqr__target_session_attrs).

Виртуальные параметры можно задавать комментариями в SQL или через `SET`.