PROD欧州主権の BaaS プラットフォームダッシュボードを開く →

エンジニアリング · 9 分読み取り

PostgREST の互換性: 対象となる内容と代替案

Affane Daylami · Fondateur · 2026年8月3日

ブログに戻る

PostgREST は、書き込むバックエンドを持たない PostgreSQL スキーマを REST API に変換します。これは特定のニーズに対する明確な対応であり、完全なバックエンドではありません。この 2 つの間の混同が、オンラインのフィードバックに寄せられた失望の原因のほとんどを説明しています。

この英語のテキストはフランス語のオリジナルから自動的に生成されたもので、まだレビューされていません。
このページは自動翻訳されました。英語版が正式です。

この記事では、PostgREST が実際にカバーする内容、ユーザーに委ねられる内容、および Aurabase が内部で実際にカバーする内容に至るまで、想定ではなくコード内で検証されているものまで詳しく説明します。

必需品

  • PostgREST は、Postgres スキーマから REST API (フィルター、リレーションシップの埋め込み、RPC 呼び出し、JWT 駆動の RLS、OpenAPI 仕様) をバックエンド コード行なしで生成します。
  • ネイティブに実行できないこと: JWT の発行、ファイルの保存、リアルタイムのプッシュ、統合されたロール切り替えを備えた接続プーラーの提供。
  • Aurabase では、Postgres エンジン プロジェクトは再実装ではなく、実際の専用 PostgREST v12.2.8 インスタンス上で実行されます。 MongoDB エンジン プロジェクトは、同じ規則に基づいていますが、制限が異なる Aurabase に固有の REST レイヤーを通過します。
  • 代替手段は、自己ホスト型 PostgREST (その周りにすべてが組み立てられる) から、Hasura や PostGraphile などの GraphQL API を介した完全なバックエンド (Supabase、Aurabase) まで多岐にわたります。
#
定義

PostgREST とは一体何ですか?

PostgREST は、既存の PostgreSQL データベースをスキーマから直接 REST API に変換する自律型 Web サーバーです。アプリケーション層を記述する必要はありません。テーブル、ビュー、関数がルートになり、SQL 権限 (ロール、RLS ポリシー) が承認層になります。

具体的には、PostgREST は、ほぼすべての評価で登場する 5 つの機能をカバーしています。

  • 水平フィルタリング — 約 30 個の演算子 (eq、 gt、 like、 ilike、 in、 is、 cs、 ov、 fts...) をクエリ文字列内で直接使用します。
  • 垂直フィルタリングと埋め込み — ?select= は列を投影し、外部キー ( customer:customers(email)など) を介してリレーションシップを埋め込みます。
  • RPC — POST /rpc/{fonction} は、エンドポイントとなる SQL 関数を直接呼び出します。
  • JWT によって駆動される RLS — PostgREST は、受信したトークン (SET LOCAL ROLE) に応じてアクティブな Postgres ロールを切り替えるため、アプリケーション側で承認ロジックが重複することなく、ポリシーがそのまま適用されます。
  • 自己生成 OpenAPI — 仕様は公開されたスキーマから推定され、手動で管理するファイルは必要ありません。
典型的な PostgREST クエリbash
curl "https://<gateway>/v1/db/<project_id>/orders \
  ?select=id,total,customer:customers(email) \
  &status=eq.paid \
  &order=created_at.desc" \
  -H "apikey: <votre-cle-api>"

単一の HTTP リクエストで、支払い済みの注文をフィルタリングし、外部キーを介して顧客の電子メールを埋め込み、日付順に並べ替えます。ルートを 1 つも手書きする必要はありません。

RPC は同じロジックに従います。つまり、データベースにすでに書き込まれている SQL 関数が POST エンドポイントになり、その引数は JSON で渡されます。

RPC呼び出しbash
curl -X POST "https://<gateway>/v1/db/<project_id>/rpc/monthly_revenue" \
  -H "apikey: <votre-cle-api>" \
  -H "Content-Type: application/json" \
  -d '{"year": 2026, "month": 8}'

この原則 (Postgres スキーマは API の信頼できる唯一の情報源である) が、PostgREST を予測可能にするものです。すべての動作の変更は、実際のスキーマから派生する可能性のある別個のアプリケーション層を経由するのではなく、SQL 移行を経由します。このプロジェクトはオープンソースであり、特定の BaaS プロバイダーから独立した GitHub上で開発されています。

#
限界

PostgREST ができないこと

PostgREST は CRUD 層を解決します。アプリケーション バックエンドの残りの部分は解決されません。これを単独で採用するチームでは、体系的に 4 つの欠点が発生します。

  • 認証 — JWT の発行や統合されたユーザー管理はありません。 SQL で構築するか、外部サービスに委任する必要があります。
  • ファイル ストレージ — なし。 S3 バケットまたは同等のものは個別に接続されたままになります。
  • リアルタイム — PostgREST は 1 回限りの HTTP リクエストに応答し、イベントをプッシュしません。
  • 接続プーラー — PostgREST 自体は Postgres に接続しますが、高度なプーラーは統合しません。大規模になると、その管理はそれ自体で運用上の決定になります。クラシック トランザクション モードのプーラーは、PostgREST スキーマのリロード メカニズムと競合します (Aurabase がこの妥協をどのように解決するかを以下で参照してください)。
情報

これらの欠点はいずれも設計上の欠陥ではありません。PostgREST は特定のジョブ (スキーマ → REST API) を自発的に実行します。この厳しい境界により、その動作が予測可能になります。

実際的な結果は明確に述べておく必要があります。認証がなければ、RLS ポリシーが匿名の顧客とデータの間の唯一のセキュリティ境界になります。 anon ロールに関する不適切に記述されたポリシーは、追加のアプリケーション層によって置き換えられることはありません。

#
コードをチェックインしました

Aurabase の PostgREST: 実際にカバーされている内容

Aurabase Postgres エンジンプロジェクト (デフォルトエンジン) では、ゲートウェイは各 CRUD リクエストをこのプロジェクト専用の PostgREST v12.2.8 インスタンス (テナントの Postgres クラスタと同じ場所にある 2 つのレプリカ) に直接ルーティングします。これはおおよその互換性ではありません。これは、同じ演算子、同じ埋め込み、同じ RPC、JWT によって駆動される同じ RLS を備えた PostgREST アップストリーム バイナリそのものです。

MongoDB エンジン プロジェクトの場合は話が異なります。 MongoDB には PostgREST に相当するものはありません。これらのリクエストは内部 Aurabase サービスにルーティングされ、同じ規則のサブセット (同一の演算子名、埋め込み付きの ?select= 構文、Prefer および Content-Range ヘッダー) が再実装されますが、リレーショナル エンジンではなくドキュメント エンジン上にあります。この層には独自の制限があります。ミューテーションによって返される表現で要求された埋め込みは、暗黙的に無視されるのではなく明示的に拒否され、SQL 関数に相当する RPC ルートがありません。

選択する際には区別が重要です

RPC と RLS を含む PostgREST の完全な互換性は、Postgres エンジンの事実であり、エンジン間での保証ではありません。プロジェクトが RPC で公開される SQL 関数に依存している場合、現時点では Postgres エンジンが唯一の選択肢です。

技術的な詳細は直感とは対照的です。各専用 PostgREST インスタンスは、このテナントにデプロイされた PgBouncer プーラーを経由せずに、プライマリ Postgres に直接接続されたままになります。想定される理由: トランザクション プーリング モードでは、LISTEN/NOTIFY (永続的な接続) に依存する PostgREST スキーマのリロードが中断され、トランザクションごとに接続をリサイクルするプールとは互換性がありません。

本番環境で役立つもう 1 つの詳細: 非アクティブなプロジェクトを一時停止してリソースを節約できます。スリープ状態のプロジェクトに対する最初のリクエストはウェイクアップをトリガーし、再試行遅延を伴う 503 を受け取ります。これは専用の PostgREST インスタンスが復帰するまでの時間です。コストとコールド レイテンシの間の想定される妥協点であり、隠れたインシデントではありません。

#
比較

PostgREST の代替手段にはどのようなものがありますか?

PostgREST には明確な用途があります。Postgres スキーマは信頼できる情報源であり、チームは CRUD レイヤーを手動で作成することを避けたいと考えています。この特定のケースとは別に、追加したいものに応じて、まったく何もないもの (裸の自己ホスト型) から、すぐに使用できる完全なバックエンドまで、いくつかの代替ファミリーが存在します。

以下の表は、各オプションがネイティブにカバーする内容と、各プロジェクトで選択されたアーキテクチャの価値判断を行わずに明示的にユーザーに委ねられる内容を比較しています。

自己ホスト型 PostgREST自己生成された REST API (フィルター、埋め込み、RPC、RLS)。認証、ストレージ、リアルタイム、管理 UI など、すべてをまとめます。
スーパーベースPostgREST + 認証 (GoTrue)、ストレージ、リアルタイム、エッジ機能を統合。サービスごとに組み立てられた異種スタック (Elixir/Go/TS/Node)。
ハスラ / ポストグラフィルPostgres から自動生成された GraphQL API。REST ではなく GraphQL アプローチ — 以下の専用の比較。
ディレクタス管理 UI + 一般的な REST/GraphQL API、マルチ DBMS。データ管理/CMS 向けに設計されており、完全なアプリケーション バックエンドではありません。
手作りフレームワーク (Express、FastAPI、Rails…)あらゆる道路を完全にコントロール。CRUD、検証、認証、プーリング - すべて手書き。
オーラベースPostgres プロジェクトごとに専用の本物の PostgREST + 認証、ストレージ、リアルタイム、エッジ機能、AI がすでに統合されています。MongoDB エンジンでは、PostgREST 自体ではなく、Aurabase によって REST レイヤーが再構築されます。

「セルフホスト型」を選択するときに過小評価されがちな点です。PostgREST 自体は実行するのに軽いままですが、本番運用 (バージョン更新、高可用性、プーラーとの関連付け、監視) は完全にユーザーの責任になります。マネージド プラットフォームが吸収するのはソフトウェアではなく、この運用作業です。

GraphQL アプローチ (pg_graphql、Hasura、PostGraphile) 間の詳細な比較については、Postgres の GraphQL API に特化した記事 を参照してください。

#
決定

選び方

最も頻繁に現れるのは 4 つの状況です。正しい選択は主に、自分で何を組み立て、保守するかによって決まります。

  • 必要なのは既存の Postgres スキーマ上の REST API だけであり、他には何も必要ありません。 自己ホスト型 PostgREST で十分です。機能することはそのままで、他に何もインストールする必要はありません。
  • 追加の認証、ストレージ、リアルタイムが必要であり、いくつかのサービスを組み立てる準備ができています。 Supabase、または独自のアプリケーション スタックを伴う PostgREST は、このニーズを満たします。
  • あなたは REST よりも GraphQL を好みます。 Hasura または PostGraphile がこの領域をカバーします。これは、PostgREST を直接置き換えるものではなく、異なるアーキテクチャの選択です。
  • 複数の個別のサービスをつなぎ合わせることなく、完全な Postgres バックエンドが必要です。 これは、が Rust アーキテクチャを統合した ドキュメントの角度です。つまり、認証、ストレージ、リアルタイム、およびエッジ関数によってネイティブに囲まれた、CRUD 層の実際の PostgREST です。
#
よくある質問

よくある質問

PostgRESTとは何ですか?+
PostgREST は、既存の PostgreSQL データベースをそのスキーマから直接 REST API に変換するオープン ソース Web サーバーです。書き込み用のバックエンドなしで、テーブル、ビュー、関数がルートになります。
PostgREST はバックエンド全体を置き換えることができますか?+
いいえ、PostgREST は CRUD レイヤー (フィルター、埋め込み、RPC、RLS) をカバーしますが、JWT の発行、ファイル ストレージ、リアルタイムはカバーしません。完全なバックエンドを実現するには、これらのレンガを自分で組み立てるか、すでにそれらが統合されているプラ​​ットフォームを採用する必要があります。
Aurabase は PostgREST と 100% 互換性がありますか?+
Postgres エンジンプロジェクトでは、はい。Aurabase は、再実装ではなく、実際の上流の PostgREST インスタンスにルーティングします。 MongoDB エンジンプロジェクトでは、いいえ: REST レイヤーは、Aurabase によってドキュメントエンジン上で再構築された PostgREST 規約のサブセットであり、さまざまな制限があります (RPC なし、突然変異時の埋め込み拒否)。
バックエンドを作成せずに Postgres で自動 REST API を取得するにはどうすればよいですか?+
主なオプションは 2 つあります。PostgREST をデータベースの前に自分でインストールする (ダイアグラムを読み取り、ルートを公開する) か、すでに統合されているプラットフォーム (Supabase や Aurabase など) を使用して、インスタンスの使用に加えて悪用を避けることです。

導入の準備はできていますか?

5 分でバックエンドが完成します。

クレジット カードは不要 · 500 MB 無料 · 50,000 MAU