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

Настройка источника Postgres с TimescaleDB

Beta feature. Learn more.

Предпосылки

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

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

  • Managed Service for Timescale
  • Timescale Cloud.

Существуют сторонние поставщики, которые предлагают управляемые услуги, позволяющие использовать расширение TimescaleDB, но из-за лицензирования эти поставщики поддерживают только открытую версию расширения.

Гипертаблицы Timescale ведут себя иначе по сравнению с обычными таблицами Postgres во многих отношениях. Это создает некоторые сложности в процессе их репликации, поэтому возможность репликации гипертаблиц Timescale следует рассматривать как максимально возможную.

Поддерживаемые версии Postgres

ClickPipes поддерживает версии Postgres 12 и выше.

Включить логическую репликацию

Шаги, которые нужно выполнить, зависят от того, как развернута ваша инстанция Postgres с TimescaleDB.

  • Если вы используете управляемую услугу и ваш провайдер указан в боковом меню, пожалуйста, следуйте руководству для этого провайдера.
  • Если вы развертываете TimescaleDB сами, следуйте общему руководству.

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

к сведению

Timescale Cloud не поддерживает включение логической репликации, которая необходима для трубопроводов Postgres в режиме CDC. В результате пользователи Timescale Cloud могут выполнять только одноразовую загрузку своих данных (Initial Load Only) с помощью Postgres ClickPipe.

Конфигурация

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

к сведению

Если вы хотите выполнить только одноразовую загрузку ваших данных (Initial Load Only), пропустите шаги с 2 и далее.

  1. Создайте пользователя Postgres для трубопровода и предоставьте ему разрешения на 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 (для отправки изменений для других таблиц, не входящих в трубопровод) и снизит общую эффективность.

к сведению

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

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

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

Устранение неполадок

Изначальная загрузка для таблиц может завершиться ошибкой:

ERROR: transparent decompression only supports tableoid system column (SQLSTATE 42P10)

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

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

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