Сгенерированные столбцы в Postgres: подводные камни и лучшие практики
При использовании сгенерированных столбцов PostgreSQL в таблицах, подлежащих репликации, необходимо учитывать несколько важных моментов. Эти подводные камни могут повлиять на процесс репликации и согласованность данных в целевых системах.
Проблема с генерируемыми столбцами
-
Не передаются через
pgoutput: Генерируемые столбцы не передаются через логический плагин репликацииpgoutput. Это означает, что при репликации данных из PostgreSQL в другую систему значения генерируемых столбцов не включаются в поток репликации. -
Проблемы с первичными ключами: Если генерируемый столбец является частью вашего первичного ключа, это может вызвать проблемы с дедупликацией на стороне приёмника. Поскольку значения генерируемых столбцов не реплицируются, целевая система не будет иметь необходимой информации для корректной идентификации и дедупликации строк.
-
Проблемы с изменениями схемы: Если вы добавите генерируемый столбец в таблицу, которая уже реплицируется, новый столбец не будет заполнен на стороне приёмника, так как Postgres не передаёт RelationMessage для нового столбца. Если затем вы добавите новый негенерируемый столбец в ту же таблицу, ClickPipe при попытке согласовать схему не сможет найти генерируемый столбец в целевой системе, что приведёт к сбою процесса репликации.
Рекомендуемые практики
Чтобы обойти эти ограничения, придерживайтесь следующих рекомендаций:
-
Воссоздавайте вычисляемые столбцы на стороне приемника: Вместо того чтобы полагаться на процесс репликации для обработки вычисляемых столбцов, рекомендуется воссоздавать эти столбцы на стороне приемника с помощью инструментов вроде dbt (data build tool) или других механизмов преобразования данных.
-
Избегайте использования вычисляемых столбцов в первичных ключах: При проектировании таблиц, которые будут реплицироваться, лучше не включать вычисляемые столбцы в состав первичного ключа.
Планируемые улучшения интерфейса
В будущих версиях мы планируем добавить пользовательский интерфейс (UI), который поможет пользователям в следующем:
-
Определение таблиц с вычисляемыми столбцами: В UI появится возможность определять таблицы, содержащие вычисляемые столбцы. Это поможет пользователям понять, какие таблицы затронуты этой проблемой.
-
Документация и рекомендации по лучшим практикам: В UI будут представлены лучшие практики по использованию вычисляемых столбцов в реплицируемых таблицах, включая рекомендации по тому, как избегать распространённых ошибок.