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

Руководство по настройке источника данных Postgres с TimescaleDB

Beta feature. Learn more.

Предпосылки

TimescaleDB — это расширение Postgres с открытым исходным кодом, разработанное компанией Timescale Inc, которое нацелено на повышение производительности аналитических запросов без необходимости перехода с Postgres. Этого удаётся добиться за счёт создания «гипертаблиц» (hypertables), которые управляются расширением и поддерживают автоматическое разбиение на фрагменты («чанки», chunks). Гипертаблицы также поддерживают прозрачное сжатие и гибридное строчно-колоночное хранение (известное как «hypercore»), хотя для этих возможностей требуется версия расширения с проприетарной лицензией.

Компания Timescale Inc также предлагает два управляемых сервиса для TimescaleDB:

  • Managed Service for Timescale
  • Timescale 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), пропустите шаги, начиная со второго.

  1. Создайте пользователя Postgres для ClickPipe и назначьте ему права SELECT на таблицы, которые вы хотите реплицировать.
  CREATE USER clickpipes_user PASSWORD 'clickpipes_password';
  GRANT USAGE ON SCHEMA "public" TO clickpipes_user;
  -- При необходимости можно ограничить эти права GRANT только отдельными таблицами, а не всей схемой
  -- Однако при добавлении новых таблиц в ClickPipe потребуется также предоставить права на них этому пользователю.
  GRANT SELECT ON ALL TABLES IN SCHEMA "public" TO clickpipes_user;
  ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO clickpipes_user;
Примечание

Обязательно замените clickpipes_user и clickpipes_password на нужные имя пользователя и пароль.

  1. От имени суперпользователя/администратора Postgres создайте публикацию на исходном экземпляре, включающую таблицы и гипертаблицы, которые вы хотите реплицировать, а также всю схему _timescaledb_internal. При создании ClickPipe необходимо выбрать эту публикацию.
-- При добавлении новых таблиц в ClickPipe их также необходимо вручную добавить в публикацию. 
  CREATE PUBLICATION clickpipes_publication FOR TABLE <...>, <...>, TABLES IN SCHEMA _timescaledb_internal;
Совет

Мы не рекомендуем создавать публикацию FOR ALL TABLES: это приводит к увеличению трафика из Postgres в ClickPipes (в этом случае отправляются изменения и для других таблиц, не входящих в pipe) и снижает общую эффективность.

Для публикаций, создаваемых вручную, добавьте все необходимые таблицы в публикацию, прежде чем добавлять их в pipe.

Справочные материалы

Некоторые управляемые сервисы не предоставляют своим администраторам необходимые права для создания публикации для всей схемы. В таком случае обратитесь в службу поддержки вашего провайдера. В качестве альтернативы вы можете пропустить этот и следующие шаги и выполнить разовую загрузку данных.

  1. Предоставьте пользователю, созданному ранее, права на репликацию.
-- Предоставить пользователю права репликации
  ALTER USER clickpipes_user REPLICATION;

После выполнения этих шагов вы сможете перейти к созданию ClickPipe.

Настройте сетевой доступ

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