Перейти к основному содержимому
Перейти к основному содержимому

ClickPipes для Postgres: Обработка столбцов TOAST

При репликации данных из PostgreSQL в ClickHouse важно учитывать ограничения и особенности обработки столбцов TOAST (Метод хранения больших атрибутов). Этот путеводитель поможет вам выявить и правильно обработать столбцы TOAST в процессе репликации.

Что такое столбцы TOAST в PostgreSQL?

TOAST (Метод хранения больших атрибутов) — это механизм PostgreSQL для обработки больших значений полей. Когда строка превышает максимальный размер строки (обычно 2 КБ, но это может варьироваться в зависимости от версии PostgreSQL и конкретных настроек), PostgreSQL автоматически перемещает большие значения полей в отдельную таблицу TOAST, храня только указатель в основной таблице.

Важно отметить, что во время захвата изменений данных (CDC) неизмененные столбцы TOAST не включаются в поток репликации. Это может привести к неполной репликации данных, если это не будет правильно обработано.

Во время начальной загрузки (снимка) все значения столбцов, включая столбцы TOAST, будут корректно реплицированы независимо от их размера. Ограничения, описанные в этом руководстве, в основном влияют на текущий процесс CDC после начальной загрузки.

Вы можете узнать больше о TOAST и его реализации в PostgreSQL здесь: https://www.postgresql.org/docs/current/storage-toast.html

Выявление столбцов TOAST в таблице

Чтобы определить, есть ли у таблицы столбцы TOAST, вы можете использовать следующий SQL-запрос:

Этот запрос вернет имена и типы данных столбцов, которые потенциально могут быть TOAST. Однако важно отметить, что этот запрос только идентифицирует столбцы, которые подходят для хранения TOAST на основе их типа данных и атрибутов хранения. Чтобы определить, содержат ли эти столбцы на самом деле данные TOAST, вам нужно учитывать, превышают ли значения в этих столбцах указанный размер. Фактическое TOAST-хранение данных зависит от конкретного содержимого, хранящегося в этих столбцах.

Обеспечение правильной обработки столбцов TOAST

Чтобы гарантировать правильную обработку столбцов TOAST во время репликации, вам следует установить REPLICA IDENTITY таблицы на FULL. Это говорит PostgreSQL включать полную старую строку в WAL для операций UPDATE и DELETE, обеспечивая доступность всех значений столбцов (включая столбцы TOAST) для репликации.

Вы можете установить REPLICA IDENTITY на FULL, используя следующую SQL-команду:

Обратитесь к этой статье в блоге для получения информации о производительности при установке REPLICA IDENTITY FULL.

Поведение репликации при отсутствии установленного REPLICA IDENTITY FULL

Если REPLICA IDENTITY FULL не установлен для таблицы со столбцами TOAST, вы можете столкнуться со следующими проблемами при репликации в ClickHouse:

  1. Для операций INSERT все столбцы (включая столбцы TOAST) будут корректно реплицированы.

  2. Для операций UPDATE:

    • Если столбец TOAST не изменен, его значение будет отображаться как NULL или пустое в ClickHouse.
    • Если столбец TOAST изменен, он будет корректно реплицирован.
  3. Для операций DELETE значения столбцов TOAST будут отображаться как NULL или пустые в ClickHouse.

Такое поведение может привести к несоответствиям данных между вашим источником PostgreSQL и целевым ClickHouse. Поэтому важно установить REPLICA IDENTITY FULL для таблиц со столбцами TOAST, чтобы обеспечить точную и полную репликацию данных.

Заключение

Правильная обработка столбцов TOAST необходима для поддержания целостности данных при репликации из PostgreSQL в ClickHouse. Выявив столбцы TOAST и установив соответствующий REPLICA IDENTITY, вы можете гарантировать, что ваши данные реплицируются точно и полностью.