TimescaleDB 拡張付き Postgres ソースのセットアップガイド
背景
TimescaleDB は、Timescale Inc によって開発されたオープンソースの Postgres 拡張機能であり、 Postgres から移行することなく分析クエリのパフォーマンスを向上させることを目的としています。これは、拡張機能によって管理される 「ハイパーテーブル」を作成し、それらが自動的な「チャンク」へのパーティション化をサポートすることで実現されています。 ハイパーテーブルは透過的な圧縮やハイブリッド行・カラムナ型ストレージ(「hypercore」として知られる)もサポートしますが、 これらの機能を利用するには、プロプライエタリライセンス版の拡張機能が必要です。
Timescale Inc は TimescaleDB 向けに 2 つのマネージドサービスも提供しています:
Managed Service for TimescaleTimescale Cloud
TimescaleDB 拡張機能を利用できるマネージドサービスを提供するサードパーティベンダーも存在しますが、 ライセンスの関係により、これらのベンダーは拡張機能のオープンソース版のみをサポートしています。
Timescale のハイパーテーブルはいくつかの点で通常の Postgres テーブルとは異なる挙動をします。 これはレプリケーション処理を複雑にするため、Timescale のハイパーテーブルをレプリケートする機能は ベストエフォートとして扱うべきです。
サポートされている Postgres バージョン
ClickPipes は Postgres バージョン 12 以降に対応しています。
論理レプリケーションを有効化する
TimescaleDB を含む Postgres インスタンスのデプロイ方法によって、実施する手順が異なります。
- マネージドサービスを利用していて、そのプロバイダーがサイドバーに記載されている場合は、そのプロバイダー向けガイドに従ってください。
- 自身で TimescaleDB をデプロイしている場合は、汎用ガイドに従ってください。
上記以外のマネージドサービスを利用していて、論理レプリケーションがまだ有効になっていない場合は、プロバイダーにサポートチケットを送信し、有効化の支援を依頼してください。
Timescale Cloud は論理レプリケーションをサポートしていません。論理レプリケーションは CDC モードの Postgres pipes に必要です。
そのため、Timescale Cloud のユーザーは Postgres ClickPipe を使用したデータの一度きりのロード(Initial Load Only)のみ実行できます。
設定
Timescale のハイパーテーブル自体には、挿入されたデータは保存されません。代わりに、データは _timescaledb_internal スキーマ内にある対応する複数の「チャンク」テーブルに保存されます。ハイパーテーブルに対してクエリを実行する場合、これは問題になりません。しかし論理レプリケーション中は、ハイパーテーブルの変更ではなく、チャンクテーブルの変更を検出します。Postgres ClickPipe には、チャンクテーブルから親ハイパーテーブルへの変更を自動的に再マッピングするロジックがありますが、これには追加の手順が必要です。
データの一度限りのロード(Initial Load Only)のみを行いたい場合は、手順 2 以降をスキップしてください。
- ClickPipe 用の Postgres ユーザーを作成し、レプリケーションしたいテーブルに対する
SELECT権限を付与します。
clickpipes_user と clickpipes_password は、必ず任意のユーザー名とパスワードに置き換えてください。
- PostgreSQL のスーパーユーザー/管理ユーザーとして、レプリケーションしたいテーブルおよびハイパーテーブルに加え、
_timescaledb_internalスキーマ全体を含む publication をソースインスタンス上に作成します。ClickPipe を作成する際には、この publication を選択する必要があります。
FOR ALL TABLES で publication を作成することは推奨しません。その場合、Postgres から ClickPipes へのトラフィック(パイプに含まれていない他のテーブルの変更送信)が増加し、全体的な効率が低下します。
publication を手動で作成する場合は、パイプに追加する前に、対象とするテーブルをすべて publication に追加してください。
一部のマネージドサービスでは、スキーマ全体に対する publication を作成するために必要な権限が管理者ユーザーに付与されていません。 この場合は、プロバイダーにサポートチケットを起票してください。あるいは、この手順と後続の手順をスキップし、一度きりのデータロードを実行することもできます。
- 先ほど作成したユーザーにレプリケーション権限を付与します。
これらの手順が完了すると、ClickPipe を作成できるようになります。
ネットワークアクセスの構成
Timescale インスタンスへのトラフィックを制限したい場合は、ドキュメントに記載されている静的 NAT IP を許可リストに登録してください。 具体的な手順はプロバイダーによって異なります。ご利用のプロバイダーがサイドバーに記載されている場合はその手順に従い、記載がない場合はプロバイダーに問い合わせチケットを送信して確認してください。