PRODSouveräne europäische BaaS-PlattformÖffnen Sie das Dashboard →

Ingenieurwesen · 10 Min. Lesezeit

pg_graphql vs Hasura und PostGraphile auf Postgres

Affane Daylami · Fondateur · 31. Juli 2026

Zurück zum Blog

Eine GraphQL-API auf Postgres bedeutet je nach Tool sehr unterschiedliche Dinge. PostGraphile stellt einen separaten Knotenserver bereit. Hasura stellt eine GraphQL-Engine vor Ihrer Datenbank bereit. pg_graphql läuft in Postgres – das ist der Ansatz von Aurabase. Dies ist kein Implementierungsdetail: Es ändert, was Sie hosten, sichern und warten müssen.

Dieser englische Text wurde automatisch aus dem französischen Original generiert und wurde noch nicht überprüft.
Diese Seite wurde automatisch übersetzt. Maßgeblich ist die englische Version.

pg_graphql ist eine Open-Source-Postgres-Erweiterung, die von Supabase verwaltet wird – es ist keine Erfindung von Aurabase. Was wir entwickelt haben, ist die native und optionale Integration in die Plattform: ein Kästchen, das pro Projekt angekreuzt werden muss, kein Dienst, der bereitgestellt werden muss. Dieser Beitrag beschreibt die tatsächliche Architektur, zeigt, wie man sie aktiviert, und vergleicht ehrlich die Kompromisse mit Hasura und PostGraphile v5.

Das Wesentliche
  • pg_graphql führt in Postgres als SQL-Erweiterung aus – im Gegensatz zu Hasura und PostGraphile muss kein separater GraphQL-Server bereitgestellt werden.
  • Die von Aurabase bereitgestellte Wrapper-Funktion ist SECURITY INVOKER: Ihre RLS-Richtlinien werden automatisch angewendet, ohne dass ein zweites Berechtigungssystem parallel verwaltet werden muss.
  • Opt-in-Aktivierung nur pro Projekt – aura projects graphql-enable oder Studio – wird bei keinem Projekt standardmäßig aktiviert.
  • Hasura hat seinen Fokus im Juni 2025 offiziell auf PromptQL und KI-Agenten ausgerichtet, ohne seine GraphQL-Engine aufzugeben.
  • PostGraphile v5 wurde am 24. März 2026 allgemein verfügbar – ein direkter und aktiver Konkurrent, kein ruhendes Projekt.
#
Übersicht

pg_graphql, in einem Satz

pg_graphql prüft Ihr SQL-Schema und generiert ein GraphQL-Schema, das der Relay-Konvention entspricht – <table>Collection, edges, node, Filter nach Spaltentyp, Paginierung nach Cursor. Kein SDL, das manuell geschrieben oder verwaltet werden muss: Das GraphQL-Schema folgt Ihrem Postgres-Schema.

Der Punkt, der für die Architektur wichtig ist: Dieser Schemagenerator lebt in der Datenbank, als SQL-Funktion, nicht als daneben liegender HTTP-Prozess. Aurabase pinnt die 1.6.1-Version der Erweiterung (veröffentlicht am 7. Mai 2026) in seinem Postgres-Image – dem gleichen offiziellen .deb-Paket, das von Supabase vertrieben wird. Es wird sowohl auf dem gemeinsam genutzten Cluster als auch auf den dedizierten Postgres-Instanzen installiert.

Wenn Sie von Supabase kommen, wo pg_graphql schon seit langem nativ aktiviert ist, wird Ihnen die Logik bekannt sein. Unser detaillierter -Vergleich und unser -Migrationsleitfaden decken den Rest des RLS-Schemas und der Richtlinien ab, die gleich bleiben.

#
Kontext 2026

Was sich bei Hasura und PostGraphile geändert hat

Keiner der beiden historischen Konkurrenten von „Instant GraphQL on Postgres“ ist verschwunden. Ihre Positionierung hat sich verändert, und ein aktualisierter Artikel sollte dies widerspiegeln, anstatt den Stand von vor zwei Jahren zu zitieren.

Hasura veröffentlichte im Juni 2025 einen Beitrag mit dem expliziten Titel „Von GraphQL zu PromptQL: Ein neues Kapitel beginnt“, unterzeichnet von seinem Mitbegründer Tanmai Gopal. Die Botschaft: Das Unternehmen konzentriert seine Roadmap neu auf PromptQL, eine Datenzugriffsschicht, die für KI-Agenten entwickelt wurde. Die GraphQL-Engine wird nicht entfernt – Hasuras Homepage präsentiert sie immer noch als „kampferprobt“ – aber sie ist nicht mehr die vorrangige Nachricht.

PostGraphilehat seinerseits das Gegenteil bewirkt. Die Version 5, die sich seit 2023 in Form von Betas in der Entwicklung befindet, wurde am 24. März 2026 mit einer neuen Abfrageplanungs-Engine namens Grafast allgemein verfügbar. Dies ist kein Projekt, dem die Puste ausgeht: Die letzte Version, 5.1.4, stammt vom 5. August 2026. Das npm-Paket zählte allein in der Woche vom 16. bis 22. August 2026 119.230 Downloads (npm-Registrierung, konsultiert am 23. August 2026).

Scharfsinn

Praktische Konsequenz: Der wirklich freie Platz ist nicht „GraphQL auf Postgres, niemand berührt ihn“ – es ist der spezifische GraphQL-Zero-Config-Slot, der mit einem Befehl aktiviert wird und keinen Dienst zum Hosten hat. Hasura entfernt sich durch strategische Entscheidungen davon; PostGraphile hat es nie ins Visier genommen, sein Modell bleibt „Node.js-Bibliothek zur Selbstintegration“.

#
Architektur

Wo sich jede Lösung tatsächlich dreht

Der Unterschied, der alles andere strukturiert – Betriebskosten, Angriffsfläche, Latenz – besteht darin, wo die GraphQL-Engine ausgeführt wird.

Wo es sich drehtSQL-Erweiterung in PostgresSeparater GraphQL-Server (Go) vor PostgresNode.js-Bibliothek/Server, vor Postgres
Bereitstellung erforderlichKeine – aktiviert durch eine ProjektflaggeJa – hosten und skalieren Sie die Hasura-EngineJa – hosten Sie den Node-Prozess oder integrieren Sie ihn in Ihren Server
BerechtigungsmodellLegacy-Postgres-RLS (SECURITY INVOKER)Hasuras eigenes Berechtigungssystem, pro Rolle/TabelleRLS Postgres über pgSettings – auch native Delegation
Standardmäßig SelbstbeobachtungDeaktiviertAbhängig von der MotorkonfigurationAbhängig von der Serverkonfiguration
Positionierung 2026Native Option eines Postgres BaaSKonzentriert sich seit Juni 2025 wieder auf PromptQL/IAGA v5 seit März 2026, aktives Projekt
AURABASEHASURAPOSTGRAPHISCH V5

Um ehrlich zu sein: PostGraphile delegiert die Autorisierung auch über pgSettings und Rollenwechsel an Postgres – natives RLS ist nicht exklusiv für pg_graphql. Der Unterschied bleibt, wer diese Brücke hostet und konfiguriert: Bei PostGraphile sind Sie es; Bei Aurabase ist dies bereits geschehen.

#
Unter der Haube

Wie Aurabase pg_graphql für ein Projekt aktiviert

Die Aktivierung ist pro Projekt optional und für Postgres-Engine-Projekte reserviert – ein MongoDB-Projekt lehnt die Anfrage ab (GRAPHQL_UNSUPPORTED_ENGINE), da pg_graphql eine Postgres-Erweiterung ohne Äquivalent auf der anderen Engine ist.

Über die CLI oder durch direkten Aufruf des Managementplans:

terminalbash
# Idempotent: Durch das Zurückrufen eines bereits aktivierten Projekts wird nichts neu erstellt
aura projects graphql-enable <project_id>

# HTTP-Äquivalent (Verwaltungsebene, JWT-Konsole)
curl -X POST "$AURA_CONTROL_URL/v1/control/projects/$PROJECT_ID/graphql/enable" \
  -H "Authorization: Bearer $CONSOLE_JWT"

Auf der Serverseite führt der Aufruf einen graphql_enable-Job aus, den der Provisioner in einer einzigen Transaktion ausführt: Installation der Erweiterung, Erstellung der Funktion graphql() in Ihrem Schema, GRANTs für die Anwendungsrollen. Wenn ein Schritt fehlschlägt, wird alles abgebrochen – es wird niemals ein Wrapper zur Hälfte installiert, und graphql_enabled wechselt erst nach vollständigem Erfolg zu true.

Es funktioniert sowohl auf dem gemeinsam genutzten Postgres-Cluster als auch auf einer dedizierten CNPG-Instanz pro Projekt – zwei verschiedene Postgres-Images, aber der gleiche Erweiterungsmechanismus. Auf dedizierten Instanzen wird die Erweiterung über das deklarative Manifest des CNPG-Operators und nicht über direktes SQL installiert – eine aktuelle Korrektur. Ein dedizierter Cluster läuft ohne Anwendungs-Superuser-Zugriff und pg_graphql benötigt genau dieses Privileg für seinen CREATE EXTENSION.

Von Studio aus erfolgt derselbe Ablauf über die Registerkarte „Tabellenkonfiguration“. Dort aktiviert ein Button die Erweiterung auf Projektebene – derselbe HTTP-Aufruf wie oben, mit Polling bis zur Konvergenz. Ein zweites Steuerelement legt dann eine @graphql-Direktive pro Tabelle fest, um totalCount und die Aggregationsfelder in seiner GraphQL-Sammlung zu aktivieren oder nicht, ohne den Editor zu verlassen.

Einzelbefehlsansicht: Aktivierung → Bereitstellungsjob mit Thread (idempotent, No-Op, wenn bereits im Flug) → DDL-Transaktion (Erweiterung, Wrapper-Funktion, GRANTs) → Flag graphql_enabled erst nach vollständigem Erfolg gesetzt → Anfragen über /rpc/graphqlmöglich.

#
Sicherheit

Legacy-RLS, kein zweites System, das gewartet werden muss

Die von Aurabase festgelegte Funktion ist SECURITY INVOKER – Standardverhalten von Postgres, erklärt, damit ein zukünftiger Refactor es nicht versehentlich ändert. Es läuft mit den Berechtigungen des tatsächlichen Aufrufers (aura_anon, aura_authenticated oder aura_service_role, abhängig vom JWT-Anspruch), sodass Ihre RLS-Richtlinien genau wie für eine REST-Anfrage gelten.

Warum nicht SECURITY DEFINER

Eine SECURITY DEFINER-Funktion würde das gesamte RLS umgehen – intern überprüft: Der Aufruf von graphql.resolve unter einer Superuser-Verbindung ohne Änderung der Anwendungsrolle gibt die Zeilen aller Eigentümer zurück, RLS oder nicht. Genau das mandantenübergreifende Risiko, das diese Wahl vermeidet.

Bei Hasura unterscheidet sich die Architektur konstruktionsbedingt: Die Engine wandelt jede GraphQL-Abfrage in eine SQL-Abfrage um, die durch für Hasura spezifische Berechtigungsregeln eingeschränkt ist. Diese Regeln werden pro Rolle und pro Tabelle in einer eigenen Ebene definiert – ein paralleles System zum Postgres RLS, keine Delegation an dieses. Zwei Orte zum Überwachen von Zugriffsregeln statt nur einem.

Introspection ({ __schema { ... } }) bleibt bei jedem Aurabase-Projekt standardmäßig deaktiviert – eine Haltung, die mit dem Rest der Plattform konsistent ist. Es kann per Schema über COMMENT ON SCHEMA aktiviert werden, wenn ein Tool wie Apollo Studio oder graphql-codegen es benötigt.

#
Anleitung

Aktivieren Sie Ihre GraphQL-API und fragen Sie sie dann ab

Sobald graphql_enabled bis true, wird auf dem Gateway keine dedizierte /graphql-Route angezeigt. Die Anfrage durchläuft den generischen RPC-Proxy , genau wie jede vom SDK aufgerufene Postgres-Funktion.

query.shbash
curl -X POST "$AURA_URL/v1/db/$PROJECT_ID/rpc/graphql" \
  -H "apikey: $AURA_ANON_KEY" -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  -d '{"query":"query { postsCollection(first: 10, filter: { published: { eq: true } }) { edges { node { id title created_at } } } }"}'

Die Antwort folgt der GraphQL-Spezifikation – { data, errors } – ohne zusätzliches Aurabase-Wrapping: Das Gateway erkennt, dass der Ziel-RPC graphql ist und umschließt ihn im Gegensatz zu einem gewöhnlichen RPC nicht erneut. Ein Standard-GraphQL-Client (Apollo, urql, graphql-request) konsumiert die Ausgabe unverändert.

Bei der Aktivierung werden standardmäßig zwei Einstellungen über eine @graphql-Direktive im Diagramm festgelegt: max_rows: 1000 und inflect_names: true. pg_graphql ist standardmäßig auf 10.000 Zeilen pro Sammlung begrenzt – ohne first:kann eine große Tabelle den Speicher überlasten. inflect_names liefert lesbare Typnamen anstelle des rohen Snake_case von SQL-Tabellen.

#
Grenzen

Was pg_graphql (noch) nicht kann

Im Sinne dieses Blogs soll es dokumentiert und nicht verborgen werden.

  • Keine nativen GraphQL-Abonnements. pg_graphql deckt Abfragen und Mutationen ab, nicht Echtzeit subscriptions – dies ist eine Einschränkung der Erweiterung selbst und kein Versäumnis von Aurabase. Echtzeit-Aurabase existiert, jedoch über einen separaten Kanal (postgres_changes), nicht über eine GraphQL-Abonnementbrücke.
  • Keine Feststellungsklagen à la Hasura. Das Modell „Business Webhook verbunden mit einer GraphQL-Mutation“ hat kein direktes Äquivalent – ​​auf Aurabase durchläuft diese Logik eine Postgres-Funktion oder eine Edge-Funktion, nicht eine dedizierte GraphQL-Konfiguration.
  • Reserviert für die Postgres-Engine. Ein MongoDB-Projekt kann dies nicht aktivieren – keine Problemumgehung vorgesehen.
Infos

Warum die Aktivierung Opt-in und nicht die Standardaktivierung bleibt: Der GRANT/Roles-Bereich der Mandantendatenbank verfügt über einen dokumentierten Verlauf von Regressionen. Dies reicht aus, um zu rechtfertigen, dass keine Funktionalität ohne explizite Validierung von Projekt zu Projekt berührt wird, bevor ein umfassenderer Fehler berücksichtigt wird.

#
Entscheidung

Aurabase, Hasura oder PostGraphile: je nach Kontext

Alle drei Optionen sind legitim – die richtige Wahl hängt davon ab, was Sie bereits haben und was Sie vermeiden möchten.

  • pg_graphql auf Aurabase – wenn Ihre RLS-Datenbank und Richtlinien bereits auf Aurabase leben und Sie eine zweite Möglichkeit zur Abfrage ohne zusätzliche zu überwachende Dienste wünschen.
  • Hasura – wenn Sie mehrere Datenquellen (nicht nur Postgres) hinter einem einzelnen GraphQL-Schema zusammenfassen oder wenn PromptQL und sein KI-Agent-Ansatz zu Ihrer Roadmap passen.
  • PostGraphile v5 – wenn Sie eine genaue Kontrolle über das über das Plugin-System generierte Schema wünschen und bereits einen Node.js-Server ausführen, in den Sie es integrieren können.

Die vollständige Abfragesyntax – Filter nach Spaltentyp, orderBySortierung, Paginierung nach Cursor, insertInto<Table>Collection Mutationen – finden Sie in der offiziellen pg_graphqlDokumentation. In der Aurabase GraphQL-Dokumentation unten wird auch der gesamte Zyklus detailliert beschrieben.

BEREIT ZUM EINSATZ?

Ihr Backend in fünf Minuten.

Keine Kreditkarte erforderlich · 500 MB kostenlos · 50.000 MAU