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:
-
Для операций INSERT все столбцы (включая столбцы TOAST) будут корректно реплицированы.
-
Для операций UPDATE:
- Если столбец TOAST не изменен, его значение будет отображаться как NULL или пустое в ClickHouse.
- Если столбец TOAST изменен, он будет корректно реплицирован.
-
Для операций DELETE значения столбцов TOAST будут отображаться как NULL или пустые в ClickHouse.
Такое поведение может привести к несоответствиям данных между вашим источником PostgreSQL и целевым ClickHouse. Поэтому важно установить REPLICA IDENTITY FULL
для таблиц со столбцами TOAST, чтобы обеспечить точную и полную репликацию данных.
Заключение
Правильная обработка столбцов TOAST необходима для поддержания целостности данных при репликации из PostgreSQL в ClickHouse. Выявив столбцы TOAST и установив соответствующий REPLICA IDENTITY
, вы можете гарантировать, что ваши данные реплицируются точно и полностью.