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

Руководство по настройке источника данных 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 в режиме CDC. В результате пользователи Timescale Cloud могут выполнить только однократную загрузку своих данных (Initial Load Only) с помощью Postgres ClickPipe.

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

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

Ссылки

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

  1. Создайте отдельного пользователя для ClickPipes:

    CREATE USER clickpipes_user PASSWORD 'some-password';
    
  2. Предоставьте на уровне схемы доступ только для чтения пользователю, созданному на предыдущем шаге. В следующем примере показаны права для схемы public. Повторите эти команды для каждой схемы, содержащей таблицы, которые вы хотите реплицировать:

    GRANT USAGE ON SCHEMA "public" TO clickpipes_user;
    GRANT SELECT ON ALL TABLES IN SCHEMA "public" TO clickpipes_user;
    ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO clickpipes_user;
    
  3. Предоставьте пользователю права на репликацию:

    ALTER USER clickpipes_user WITH REPLICATION;
    
  4. Создайте публикацию с таблицами, которые вы хотите реплицировать. Мы настоятельно рекомендуем включать в публикацию только те таблицы, которые вам нужны, чтобы избежать излишних накладных расходов на производительность.

    Примечание

    Любая таблица, включённая в публикацию, должна либо иметь определённый primary key, либо иметь настроенную replica identity со значением FULL. См. раздел Postgres FAQs для получения рекомендаций по выбору области действия публикаций.

    • Чтобы создать публикацию для конкретных таблиц:

      CREATE PUBLICATION clickpipes FOR TABLE table_to_replicate, table_to_replicate2;
      
    • Чтобы создать публикацию для всех таблиц в конкретной схеме:

      CREATE PUBLICATION clickpipes FOR TABLES IN SCHEMA "public";
      

    Публикация clickpipes будет содержать набор событий изменений, сгенерированных из указанных таблиц, и позже будет использоваться для приёма потока репликации.

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

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

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