Руководство по настройке источника данных Postgres с TimescaleDB
Предпосылки
TimescaleDB — это расширение Postgres с открытым исходным кодом, разработанное компанией Timescale Inc, которое нацелено на повышение производительности аналитических запросов без необходимости перехода с Postgres. Этого удаётся добиться за счёт создания «гипертаблиц» (hypertables), которые управляются расширением и поддерживают автоматическое разбиение на фрагменты («чанки», chunks). Гипертаблицы также поддерживают прозрачное сжатие и гибридное строчно-колоночное хранение (известное как «hypercore»), хотя для этих возможностей требуется версия расширения с проприетарной лицензией.
Компания Timescale Inc также предлагает два управляемых сервиса для TimescaleDB:
Managed Service for TimescaleTimescale Cloud.
Существуют сторонние поставщики управляемых сервисов, позволяющих использовать расширение TimescaleDB, но из-за условий лицензирования такие поставщики поддерживают только версию расширения с открытым исходным кодом.
Гипертаблицы Timescale в ряде аспектов ведут себя иначе, чем обычные таблицы Postgres. Это создаёт определённые сложности при их репликации, поэтому возможность репликации гипертаблиц Timescale следует рассматривать как выполняемую по принципу «best effort».
Поддерживаемые версии Postgres
ClickPipes поддерживает Postgres версии 12 и выше.
Включение логической репликации
Необходимые шаги зависят от того, как развернут ваш экземпляр Postgres с TimescaleDB.
- Если вы используете управляемый сервис и ваш провайдер указан в боковой панели, следуйте руководству для этого провайдера.
- Если вы разворачиваете TimescaleDB самостоятельно, следуйте общему руководству.
Для других управляемых сервисов создайте запрос в службу поддержки вашего провайдера, чтобы они помогли включить логическую репликацию, если она еще не включена.
Timescale Cloud не поддерживает включение логической репликации, которая необходима для конвейеров Postgres (Postgres pipes) в режиме CDC.
Таким образом, пользователи Timescale Cloud могут выполнить только однократную загрузку своих данных (Initial Load Only) с помощью
Postgres ClickPipe.
Конфигурация
Hypertable в Timescale не хранят данные, вставляемые непосредственно в них. Вместо этого данные сохраняются в нескольких соответствующих таблицах‑фрагментах («chunk»), которые находятся в схеме _timescaledb_internal. Для выполнения запросов к hypertable это не является проблемой. Но при логической репликации, вместо того чтобы отслеживать изменения в hypertable, мы отслеживаем их в таблице chunk. Postgres ClickPipe содержит логику автоматического сопоставления изменений из таблиц chunk с родительской hypertable, но для этого требуются дополнительные шаги.
Если вы хотите выполнить только однократную загрузку ваших данных (Initial Load Only), пропустите шаги, начиная со второго.
-
Создайте отдельного пользователя для ClickPipes:
-
Предоставьте на уровне схемы доступ только для чтения пользователю, созданному на предыдущем шаге. В следующем примере показаны права для схемы
public. Повторите эти команды для каждой схемы, содержащей таблицы, которые вы хотите реплицировать: -
Предоставьте пользователю права на репликацию:
-
Создайте публикацию с таблицами, которые вы хотите реплицировать. Мы настоятельно рекомендуем включать в публикацию только необходимые таблицы, чтобы избежать лишних накладных расходов на производительность.
ПримечаниеДля любой таблицы, включённой в публикацию, должен быть определён первичный ключ или настроена replica identity со значением
FULL. См. раздел Postgres FAQs для рекомендаций по определению области публикаций.-
Чтобы создать публикацию для конкретных таблиц:
-
Чтобы создать публикацию для всех таблиц в конкретной схеме:
Публикация
clickpipesбудет содержать набор событий изменений, сгенерированных из указанных таблиц, и позже будет использована для приёма потока репликации. -
-
Предоставьте пользователю, созданному ранее, права на репликацию.
После выполнения этих шагов вы сможете перейти к созданию ClickPipe.
Настройте сетевой доступ
Если вы хотите ограничить трафик к своему экземпляру Timescale, добавьте в список разрешённых адресов задокументированные статические NAT IP-адреса. Инструкции по настройке зависят от провайдера: если ваш провайдер указан в боковой панели, воспользуйтесь соответствующим разделом, в противном случае обратитесь в его службу поддержки.