Руководство по настройке источника данных 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 в режиме CDC.
В результате пользователи Timescale Cloud могут выполнить только однократную загрузку своих данных (Initial Load Only) с помощью
Postgres ClickPipe.
Конфигурация
Гипертаблицы (hypertables) Timescale не хранят вставленные в них данные напрямую. Вместо этого данные хранятся в нескольких соответствующих таблицах-фрагментах (chunk), которые находятся в схеме _timescaledb_internal. Для выполнения запросов к гипертаблицам это не является проблемой. Но при логической репликации изменения обнаруживаются не в гипертаблице, а в таблице-фрагменте (chunk). Postgres ClickPipe содержит логику для автоматического отображения изменений из таблиц-фрагментов в родительскую гипертаблицу, но для этого требуются дополнительные шаги.
Если вы хотите выполнить только однократную загрузку ваших данных (Initial Load Only), пропустите шаги, начиная со второго.
-
Создайте отдельного пользователя для ClickPipes:
-
Предоставьте на уровне схемы доступ только для чтения пользователю, созданному на предыдущем шаге. В следующем примере показаны права для схемы
public. Повторите эти команды для каждой схемы, содержащей таблицы, которые вы хотите реплицировать: -
Предоставьте пользователю права на репликацию:
-
Создайте публикацию с таблицами, которые вы хотите реплицировать. Мы настоятельно рекомендуем включать в публикацию только те таблицы, которые вам нужны, чтобы избежать излишних накладных расходов на производительность.
ПримечаниеЛюбая таблица, включённая в публикацию, должна либо иметь определённый primary key, либо иметь настроенную replica identity со значением
FULL. См. раздел Postgres FAQs для получения рекомендаций по выбору области действия публикаций.-
Чтобы создать публикацию для конкретных таблиц:
-
Чтобы создать публикацию для всех таблиц в конкретной схеме:
Публикация
clickpipesбудет содержать набор событий изменений, сгенерированных из указанных таблиц, и позже будет использоваться для приёма потока репликации. -
После выполнения этих шагов вы можете перейти к созданию ClickPipe.
Настройка сетевого доступа
Если вы хотите ограничить трафик к своему экземпляру Timescale, добавьте в список разрешённых задокументированные статические NAT IP-адреса. Порядок настройки зависит от провайдера; ознакомьтесь с разделом в боковой панели, если ваш провайдер там указан, или откройте тикет в их службе поддержки.