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