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

Сгенерированные столбцы в Postgres: подводные камни и лучшие практики

При использовании сгенерированных столбцов PostgreSQL в таблицах, подлежащих репликации, необходимо учитывать несколько важных моментов. Эти подводные камни могут повлиять на процесс репликации и согласованность данных в целевых системах.

Проблема с генерируемыми столбцами

  1. Не передаются через pgoutput: Генерируемые столбцы не передаются через логический плагин репликации pgoutput. Это означает, что при репликации данных из PostgreSQL в другую систему значения генерируемых столбцов не включаются в поток репликации.

  2. Проблемы с первичными ключами: Если генерируемый столбец является частью вашего первичного ключа, это может вызвать проблемы с дедупликацией на стороне приёмника. Поскольку значения генерируемых столбцов не реплицируются, целевая система не будет иметь необходимой информации для корректной идентификации и дедупликации строк.

  3. Проблемы с изменениями схемы: Если вы добавите генерируемый столбец в таблицу, которая уже реплицируется, новый столбец не будет заполнен на стороне приёмника, так как Postgres не передаёт RelationMessage для нового столбца. Если затем вы добавите новый негенерируемый столбец в ту же таблицу, ClickPipe при попытке согласовать схему не сможет найти генерируемый столбец в целевой системе, что приведёт к сбою процесса репликации.

Рекомендуемые практики

Чтобы обойти эти ограничения, придерживайтесь следующих рекомендаций:

  1. Воссоздавайте вычисляемые столбцы на стороне приемника: Вместо того чтобы полагаться на процесс репликации для обработки вычисляемых столбцов, рекомендуется воссоздавать эти столбцы на стороне приемника с помощью инструментов вроде dbt (data build tool) или других механизмов преобразования данных.

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

Планируемые улучшения интерфейса

В будущих версиях мы планируем добавить пользовательский интерфейс (UI), который поможет пользователям в следующем:

  1. Определение таблиц с вычисляемыми столбцами: В UI появится возможность определять таблицы, содержащие вычисляемые столбцы. Это поможет пользователям понять, какие таблицы затронуты этой проблемой.

  2. Документация и рекомендации по лучшим практикам: В UI будут представлены лучшие практики по использованию вычисляемых столбцов в реплицируемых таблицах, включая рекомендации по тому, как избегать распространённых ошибок.