> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Настройка Postgres с расширением TimescaleDB как источника для ClickPipes

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

export const galaxyOnClick = eventName => () => {
  try {
    if (typeof window !== "undefined" && window.galaxy && eventName) {
      window.galaxy.track(eventName, {
        interaction: "click"
      });
    }
  } catch (e) {}
};

export const BetaBadge = ({link, galaxyTrack, galaxyEvent}) => {
  if (link) {
    return <a href={link} target="_blank" rel="noopener noreferrer" className="betaBadge" onClick={galaxyTrack && galaxyEvent ? galaxyOnClick(galaxyEvent) : undefined}>
                <Icon />
                <span>Бета</span>
            </a>;
  }
  return <div className="betaBadge">
            <Icon />
            <span>
                Возможность в статусе бета. 
                <u>
                    <a href="/docs/beta-and-experimental-features#beta-features">
                        Подробнее.
                    </a>
                </u>
            </span>
        </div>;
};

<div id="background">
  ## Общие сведения
</div>

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

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

* `Managed Service for Timescale`
* `Timescale Cloud`.

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

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

<div id="supported-postgres-versions">
  ## Поддерживаемые версии Postgres
</div>

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

<div id="enable-logical-replication">
  ## Включение логической репликации
</div>

Дальнейшие действия зависят от того, как развернут ваш экземпляр Postgres с TimescaleDB.

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

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

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

<div id="configuration">
  ## Конфигурация
</div>

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

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

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

   ```sql theme={null}
   CREATE USER clickpipes_user PASSWORD 'some-password';
   ```

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

   ```sql theme={null}
   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. Выдайте пользователю права на репликацию:

   ```sql theme={null}
   ALTER USER clickpipes_user WITH REPLICATION;
   ```

4. От имени суперпользователя/администратора Postgres создайте [публикацию](https://www.postgresql.org/docs/current/logical-replication-publication.html) с гипертаблицами, которые вы хотите реплицировать. Публикация **также должна включать всю схему `_timescaledb_internal`**, чтобы пайп мог получать изменения из базовых таблиц фрагментов. Мы настоятельно рекомендуем включать в публикацию только нужные таблицы, чтобы избежать лишних накладных расходов на производительность.

<Warning>
  Для любой таблицы, включенной в публикацию, должен быть либо определен **первичный ключ**, *либо* для нее должна быть настроена **replica identity** со значением `FULL`. Рекомендации по определению области публикаций см. в разделе [FAQ по Postgres](/ru/integrations/clickpipes/postgres/faq#how-should-i-scope-my-publications-when-setting-up-replication).
</Warning>

```sql theme={null}
   -- When adding new tables to the ClickPipe, you'll need to add them to the publication manually as well.
   CREATE PUBLICATION clickpipes FOR TABLE table_to_replicate, table_to_replicate2, TABLES IN SCHEMA _timescaledb_internal;
```

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

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

После этого вы сможете перейти к [созданию ClickPipe](/ru/integrations/clickpipes/postgres/index).

<div id="configure-network-access">
  ## Настройка сетевого доступа
</div>

Если вы хотите ограничить трафик к своему экземпляру Timescale, добавьте [задокументированные статические NAT IP-адреса](/ru/integrations/clickpipes/home#list-of-static-ips) в список разрешённых.
Порядок действий зависит от провайдера: если ваш провайдер указан на боковой панели, воспользуйтесь соответствующей инструкцией; в противном случае создайте у него
тикет.
