ClickPipes для Postgres может обнаруживать изменения схемы в исходных таблицах и в некоторых случаях автоматически применять их к целевым таблицам. Ниже описано, как обрабатывается каждая DDL-операция:
| Тип изменения схемы | Поведение |
|---|---|
Добавление нового столбца (ALTER TABLE ADD COLUMN ...) |
Распространяется автоматически, как только в таблице происходит вставка/обновление/удаление. Новые столбцы будут заполняться для всех строк, реплицированных после изменения схемы |
Добавление нового столбца со значением по умолчанию (ALTER TABLE ADD COLUMN ... DEFAULT ...) |
Распространяется автоматически, как только в таблице происходит вставка/обновление/удаление. Поддерживаемые значения по умолчанию также добавляются в столбец ClickHouse, поэтому они применяются как к строкам, уже находящимся в ClickHouse, так и к строкам, реплицированным после изменения схемы. |
Удаление существующего столбца (ALTER TABLE DROP COLUMN ...) |
Обнаруживается, но не распространяется. Для всех строк, реплицированных после изменения схемы, в удалённых столбцах будет значение NULL |
Обратите внимание, что добавление столбца распространяется по завершении синхронизации батча, что может произойти после достижения интервала синхронизации или размера батча выборки. Подробнее об управлении синхронизацией — здесь
Значения по умолчанию для добавленных столбцов
Для добавленного столбца ClickPipes распространяет значение по умолчанию только в том случае, если может безопасно преобразовать его для ClickHouse. Если значение по умолчанию распространяется, ClickHouse использует его при чтении частей данных, созданных до добавления нового столбца. В результате строки, уже существующие в ClickHouse, имеют то же значение, которое PostgreSQL использует для строк, существовавших до ADD COLUMN; полное обновление таблицы не требуется.
Для PostgreSQL ClickPipes считывает значение, сохранённое PostgreSQL для уже существующих строк, а не текущее выражение значения по умолчанию столбца. Это важно, когда значение по умолчанию задаётся выражением: неизменяемое выражение, такое как now(), вычисляется PostgreSQL при добавлении столбца, и ClickPipes распространяет полученное значение, а не само выражение. Последующие операции SET DEFAULT или DROP DEFAULT не изменяют значение по умолчанию, используемое для существующих строк, и не распространяются в ClickHouse.
Распространяются следующие значения:
- Булевы и конечные числовые значения.
- Текстовые значения, включая
varchar,char, перечисления, UUID, JSON/JSONB,hstore, сетевые адреса и даты. - Временные метки. Временные метки с часовыми поясами нормализуются до UTC.
Значения по умолчанию не распространяются, если их невозможно безопасно преобразовать для ClickHouse, включая NULL, неконечные числовые значения, bytea, массивы, интервалы, значения времени суток и геометрические типы. Столбец всё равно добавляется, но ClickHouse использует обычное значение по умолчанию для его типа в частях, созданных до добавления столбца. Полное обновление таблицы требуется, если эти существующие строки должны содержать значение по умолчанию из источника.