メインコンテンツまでスキップ
メインコンテンツまでスキップ

Postgres with TimescaleDB ソース設定ガイド

Beta feature. Learn more.

背景

TimescaleDB は、Timescale Inc によって開発されたオープンソースの Postgres 拡張機能であり、Postgres を離れることなく分析クエリのパフォーマンスを向上させることを目的としています。これは、拡張機能によって管理され、「チャンク」への自動パーティショニングをサポートする「ハイパーテーブル」を作成することによって実現されます。ハイパーテーブルは、透過的な圧縮とハイブリッド行列ストレージ(「ハイパコア」として知られる)をサポートしていますが、これらの機能には専用ライセンスのバージョンの拡張機能が必要です。

Timescale Inc は、TimescaleDB に対する二つのマネージドサービスも提供しています:

  • Managed Service for Timescale
  • Timescale Cloud

サードパーティのベンダーが TimescaleDB 拡張機能を使用可能にするマネージドサービスを提供していますが、ライセンスの関係上、これらのベンダーは開放ソース版の拡張機能のみをサポートしています。

Timescale のハイパーテーブルは、様々な点で通常の Postgres テーブルとは異なる動作をします。これにより、複製プロセスにいくつかの複雑さが生じるため、Timescale のハイパーテーブルを複製する能力は ベストエフォート として考慮すべきです。

サポートされる Postgres バージョン

ClickPipes は Postgres バージョン 12 以降をサポートしています。

論理複製を有効にする

手順は、TimescaleDB を使用している Postgres インスタンスがどのようにデプロイされているかによって異なります。

  • マネージドサービスを使用していて、プロバイダーがサイドバーに表示されている場合は、そのプロバイダーのガイドに従ってください。
  • 自分で TimescaleDB をデプロイする場合は、一般的なガイドに従ってください。

他のマネージドサービスの場合、論理複製を有効にする手助けのためにプロバイダーとサポートチケットを提出してください。

参考

Timescale Cloud では、CDC モードでの Postgres パイプに必要な論理複製を有効にすることはサポートされていません。そのため、Timescale Cloud のユーザーは、Postgres ClickPipe でデータのワンタイムロード (Initial Load Only) のみを実行できることに注意してください。

設定

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;
-- If desired, you can refine these GRANTs to individual tables alone, instead of the entire schema
-- But when adding new tables to the ClickPipe, you'll need to add them to the user as well.
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_userclickpipes_password をお好みのユーザー名とパスワードに置き換えてください。

  1. Postgres スーパーユーザー / 管理者ユーザーとして、複製したいテーブルとハイパーテーブルがあるソースインスタンスに、_timescaledb_internal スキーマ全体を含む パブリケーションを作成します。ClickPipe を作成する際には、このパブリケーションを選択する必要があります。
-- When adding new tables to the ClickPipe, you'll need to add them to the publication as well manually. 
  CREATE PUBLICATION clickpipes_publication FOR TABLE <...>, <...>, TABLES IN SCHEMA _timescaledb_internal;
ヒント

FOR ALL TABLES のパブリケーションを作成することはお勧めしません。これは、Postgres から ClickPipes へのトラフィックが増加し(パイプに含まれていない他のテーブルの変更を送信するため)、全体の効率が低下します。

手動で作成したパブリケーションに対しては、テーブルをパイプに追加する前に、そのパブリケーションに追加したいテーブルを含めてください。

参考

一部のマネージドサービスは、管理ユーザーがスキーマ全体に対してパブリケーションを作成するために必要な権限を持っていない場合があります。その場合は、プロバイダーにサポートチケットを提出してください。もしくは、このステップと次のステップをスキップしてデータのワンタイムロードを行うことができます。

  1. 前に作成したユーザーに複製権限を付与します。
-- Give replication permission to the USER
  ALTER USER clickpipes_user REPLICATION;

これらの手順を実行した後は、ClickPipe の作成を続行できるはずです。

ネットワークアクセスを設定する

Timescale インスタンスへのトラフィックを制限したい場合は、文書化された静的 NAT IPを許可リストに追加してください。これを行う手順はプロバイダーによって異なるため、プロバイダーがサイドバーに表示されている場合はそれを参照するか、チケットを提出してください。