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

# Ограничения в Managed Service for Sharded PostgreSQL

* [Какие типы данных доступны для шардирования?](#available-data-types)

* [Какие лимиты существуют для кластера Managed Service for Sharded PostgreSQL?](#cluster-limits)

* [Можно ли выполнять JOIN между шардами?](#cross-shard-join-queries)

* [Поддерживаются ли кросс-шардовые запросы?](#cross-shard-queries)

* [Какая политика повторных попыток (retry) используется в Sharded PostgreSQL?](#retry-policy)

* [Как Sharded PostgreSQL управляет лимитами подключений?](#connection-limits)

* [Есть ли дедупликация запросов?](#query-deduplication)

* [Разрешены ли операции DDL (например, `ALTER TABLE`, `RENAME`) в транзакциях?](#ddl-operations)

#### Какие типы данных доступны для шардирования? {#available-data-types}

* Целочисленные (`INT`, `BIGINT`).
* Строки (`VARCHAR`).
* `UUID`.
* Составные ключи.
* Хеш-функции: `CITY`, `MURMUR` (только для целых чисел).

  {% note warning %}

  Пользовательские хеш-функции не поддерживаются.

  {% endnote %}

Если вам не хватает какого-либо типа данных, вы можете завести issue в [репозитории проекта на Github](https://github.com/pg-sharding/spqr/issues).

#### Какие лимиты существуют для кластера Managed Service for Sharded PostgreSQL? {#cluster-limits}

Количество роутеров и шардов в кластере Managed Service for Sharded PostgreSQL не ограничено.

Подробнее о [квотах и лимитах в Managed Service for Sharded PostgreSQL](../concepts/limits.md).

#### Можно ли выполнять JOIN между шардами? {#cross-shard-join-queries}

Нет. JOIN возможен только в пределах одного шарда. При работе со связанными данными используйте одинаковые ключи шардирования для связанных таблиц, чтобы данные находились на одном шарде.

Если вам нужно выполнять JOIN между шардами, рекомендуем использовать [Yandex MPP Analytics for PostgreSQL](../../managed-greenplum/index.md).

#### Поддерживаются ли кросс-шардовые запросы? {#cross-shard-queries}

Поддерживаются только для следующих случаев:

* Справочные таблицы (reference tables) с виртуальным параметром: `/* __spqr__engine_v2: true */`.
* `COPY` с виртуальным параметром `/* __spqr__allow_multishard: true */`.
* Транзакции, в которых передан DDL и виртуальный параметр `/* __spqr__default_route_behaviour: ALLOW */`.
* Запросы, к которым явно указан виртуальный параметр `/* __spqr__scatter_query: true */`.

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

#### Какая политика повторных попыток (retry) используется в Sharded PostgreSQL? {#retry-policy}
Роутер не выполняет пользовательские запросы повторно. Пользователю нужно самостоятельно реализовать политику повторов, исходя из своей бизнес-логики.

#### Как Sharded PostgreSQL управляет лимитами подключений? {#connection-limits}
Лимит подключений задается отдельно для каждого пользователя в параметре `conn_limit`.

#### Есть ли дедупликация запросов? {#query-deduplication}

Нет. Если клиент отключается и повторяет запрос, роутер обработает его как новый.

#### Разрешены ли операции DDL (например, ALTER TABLE, RENAME) в транзакциях? {#ddl-operations}

Да, если включен `/* __spqr__default_route_behaviour: ALLOW */`.

В зависимости от ваших задач рекомендуется использовать виртуальный параметр:

* С однофазной фиксацией — `/* __spqr__commit_strategy: 1pc */`.
* С двухфазной фиксацией — `/* __spqr__commit_strategy: 2pc */`.

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