RSS DEV コミュニティ

Supabase データベース関数ガイド — RPC と PL/pgSQL を使ったサーバーレスロジック

Follow
Supabase のデータベース関数は、複雑なビジネスロジックを PostgreSQL 内に直接統合し、Flutter アプリケーションが Edge Function をデプロイすることなく、`rpc()` を介してそれらを呼び出すことを可能にします。このアプローチにはいくつかの利点があります。複数テーブルの更新の原子性を保証し、ネットワークの往復回数を減らすことでパフォーマンスを向上させ、Row-Level Security (RLS) を尊重しながらロジックをカプセル化することでセキュリティを強化し、Deno のデプロイを排除することで開発を簡素化します。 関数は、ユーザーの連続記録を計算するなど、さまざまなタスクを実行するために作成できます。これは、活動が連続した日数を決定するために、ジャーナルエントリを反復処理します。また、リーダーボード関数のようにテーブルを返すこともできます。リーダーボード関数は、ユーザーのポイントを照会してランク付けします。さらに、タスクの完了など、複数テーブルのトランザクション関数は、複数のテーブルにわたるアトミックな更新を可能にし、データの整合性を保証し、構造化された JSON レスポンスを返します。 `SECURITY DEFINER` 句は、関数がその所有者の権限で実行されることを意味し、RLS をバイパスする可能性があります。これは慎重な使用が必要です。対照的に、`SECURITY INVOKER` は、呼び出し元の権限で関数を実行し、RLS が引き続き適用されるため、より安全なデフォルトとなります。実際のアプリケーションでは、パフォーマンスが大幅に向上することが示されています。あるユーザーは、Edge Function のコールドスタートと Deno のオーバーヘッドを排除することにより、ダッシュボード集計のレイテンシが 40% 削減されたと報告しています。本番環境でのユースケースには、リアルタイムの連続記録計算、ダッシュボードのサマリーの取得、およびアチーブメントのべき等な付与が含まれます。データベース関数と Edge Function のどちらを選択するかは、多くの場合、特定のパフォーマンス、セキュリティ、およびデプロイメントのニーズによって決まります。
favicon
dev.to
Supabase Database Functions Guide — Serverless Logic with RPC and PL/pgSQL
Create attached notes ...