> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-revert-104359-revert-104251-parquet-single.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# FAQ по миграциям в ClickHouse Managed Postgres

> Часто задаваемые вопросы о миграции данных в ClickHouse Managed Postgres.

export const PrivatePreviewBadge = () => {
  return <div className="privatePreviewBadge">
            <div className="privatePreviewIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M5.33301 6.66667V4.66667V4.66667C5.33301 3.194 6.52701 2 7.99967 2V2C9.47234 2 10.6663 3.194 10.6663 4.66667V4.66667V6.66667" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path d="M8.00033 9.33337V11.3334" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path fillRule="evenodd" clipRule="evenodd" d="M11.333 14H4.66634C3.92967 14 3.33301 13.4033 3.33301 12.6666V7.99996C3.33301 7.26329 3.92967 6.66663 4.66634 6.66663H11.333C12.0697 6.66663 12.6663 7.26329 12.6663 7.99996V12.6666C12.6663 13.4033 12.0697 14 11.333 14Z" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            {'Закрытая предварительная версия в ClickHouse Cloud'}
        </div>;
};

<PrivatePreviewBadge link="https://clickhouse.com/cloud/postgres" galaxyTrack={true} slug="migrations-faq" />

Многие вопросы о работе репликации Postgres — включая столбцы `TOAST`, слоты репликации, публикации, изменения схемы и сопоставление типов данных — освещены в [FAQ по ClickPipes для Postgres](/ru/integrations/clickpipes/postgres/faq). Эта информация также применима к миграциям ClickHouse Managed Postgres.

<div id="invalid-enum-value">
  ### Во время репликации появляется ошибка "invalid input value for enum"
</div>

Эта ошибка возникает, когда в исходном Postgres есть значение enum, которого нет в целевом ClickHouse Managed Postgres. Логическая репликация не передаёт команды `ALTER TYPE ... ADD VALUE` автоматически, поэтому новые значения enum, добавленные в источнике после первоначальной настройки схемы, приведут к сбою вставки в целевой базе.

Чтобы исправить это, добавьте отсутствующее значение в тип enum в целевом Postgres:

```sql theme={null}
ALTER TYPE your_enum_type ADD VALUE 'new_value';
```

Замените `your_enum_type` на имя вашего enum-типа, а `'new_value'` — на отсутствующее значение из сообщения об ошибке.

<div id="constraint-violation">
  ### Во время репликации возникает ошибка нарушения ограничения уникальности или проверки
</div>

Нарушения ограничений могут возникать при логической репликации, когда порядок репликации приводит к конфликту с существующим ограничением на целевой стороне.

* **Ограничения уникальности**: Мы применяем изменения пакетами в виде операций `MERGE`/`UPSERT`, записывая последнее значение для каждого первичного ключа, поэтому порядок операций для конкретного ключа может не соответствовать порядку, ожидаемому уникальным индексом. Это может временно нарушать ограничение `UNIQUE` в рамках транзакции, хотя после завершения `MERGE` ограничение соблюдается. Postgres не может отложить проверку уникального индекса так же, как проверку внешних ключей, поэтому перенести эту проверку на конец транзакции невозможно. Это не влияет на согласованность данных: идентичность строки определяется первичным ключом, и логика `MERGE` использует тот же первичный ключ.
* **Ограничения проверки**: Ограничение проверки на целевой стороне может быть строже, чем на стороне источника, либо промежуточное состояние при пакетном `MERGE` может не удовлетворять ограничению, хотя конечное состояние ему соответствует. Как и в случае с ограничениями уникальности, это не влияет на согласованность данных, поскольку `MERGE` использует первичный ключ, определяющий идентичность строки.

Чтобы возобновить репликацию, удалите проблемное ограничение в целевой базе данных Postgres:

```sql theme={null}
-- Drop a unique constraint
ALTER TABLE your_table DROP CONSTRAINT your_constraint_name;

-- Drop a check constraint
ALTER TABLE your_table DROP CONSTRAINT your_check_constraint_name;
```

Найти сведения об ограничении можно по имени из сообщения об ошибке:

```sql theme={null}
SELECT conname, conrelid::regclass, contype
FROM pg_constraint
WHERE conname = 'your_constraint_name';
```

Добавьте ограничения снова при переключении, после завершения репликации и отключения источника:

```sql theme={null}
ALTER TABLE your_table ADD CONSTRAINT your_constraint_name UNIQUE (column1, column2);
ALTER TABLE your_table ADD CONSTRAINT your_check_constraint_name CHECK (column1 > 0);
```
