ClickPipes で使用できるように Supabase Postgres を設定する方法を説明します。
ClickPipes は Supabase の IPv6 をネイティブサポートしているため、シームレスにレプリケーションできます。
権限とレプリケーションスロットを持つユーザーを作成する
管理者ユーザーとして Supabase インスタンスに接続し、次のコマンドを実行します。
-
ClickPipes 専用のユーザーを作成します:
CREATE USER clickpipes_user PASSWORD 'some-password';
-
前の手順で作成したユーザーに、スキーマレベルの読み取り専用アクセスを付与します。次の例は
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;
-
ユーザーにレプリケーション権限を付与します:
ALTER USER clickpipes_user WITH REPLICATION;
-
レプリケートしたいテーブルを含む publication を作成します。パフォーマンスのオーバーヘッドを避けるため、publication には必要なテーブルのみを含めることを強く推奨します。
publication に含まれるテーブルには、主キー が定義されているか、または replica identity が FULL に設定されている必要があります。適切な範囲の指定方法については、Postgres よくある質問 を参照してください。
-
特定のテーブル用の publication を作成するには:
CREATE PUBLICATION clickpipes FOR TABLE table_to_replicate, table_to_replicate2;
-
特定のスキーマ内のすべてのテーブル用の publication を作成するには:
CREATE PUBLICATION clickpipes FOR TABLES IN SCHEMA "public";
clickpipes publication には、指定したテーブルから生成された変更イベントの集合が含まれ、後でレプリケーションストリームを取り込むために使用されます。
max_slot_wal_keep_size を増やす
この手順を実行すると、Supabase のデータベースが再起動し、短時間のダウンタイムが発生する可能性があります。Supabase Docs に従って、Supabase のデータベースの max_slot_wal_keep_size パラメータをより大きな値 (少なくとも 100GB または 102400) に増やすことができます。この値のより適切な推奨値については、ClickPipes チームにお問い合わせください。
Supabase プロジェクトの Project Settings -> Database (Configuration の配下) に移動します。
重要: このページで Display connection pooler を無効にし、Connection parameters セクションで各パラメータを確認またはコピーしてください。
接続プールは CDC ベースのレプリケーションではサポートされていないため、無効にする必要があります。
ClickPipes の Postgres ユーザーは、データ欠損を招くおそれがあるため、RLS ポリシーによる制限を受けないようにする必要があります。以下のコマンドを実行すると、そのユーザーに対する RLS ポリシーを無効にできます。
ALTER USER clickpipes_user BYPASSRLS;
これで、ClickPipe を作成して、Postgres インスタンスから ClickHouse Cloud へのデータ取り込みを開始できます。
ClickPipe の作成時に必要になるため、Postgres インスタンスの設定時に使用した接続情報は必ず控えておいてください。