PRODSoeverein Europees BaaS-platformOpen Dashboard →

Techniek · 10 min gelezen

pg_graphql versus Hasura en PostGraphile op Postgres

Affane Daylami · Fondateur · 31 juli 2026

Terug naar blog

Een GraphQL API op Postgres betekent heel verschillende dingen, afhankelijk van de tool. PostGraphile zet een aparte Node-server in. Hasura implementeert een GraphQL-engine voor uw database. pg_graphql draait in Postgres – dit is de aanpak van Aurabase. Dit is geen implementatiedetail: het verandert wat u moet hosten, beveiligen en onderhouden.

Deze Engelse tekst is automatisch gegenereerd op basis van het Franse origineel en is nog niet beoordeeld.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.

pg_graphql is een open source Postgres-extensie die wordt onderhouden door Supabase – het is geen uitvinding van Aurabase. Wat we hebben gebouwd is de native en opt-in-integratie in het platform: een vakje dat per project moet worden aangevinkt, geen service die moet worden geleverd. Dit bericht beschrijft de daadwerkelijke architectuur, laat zien hoe je deze kunt inschakelen en vergelijkt eerlijk de afwegingen met Hasura en PostGraphile v5.

De essentie
  • pg_graphql voert uit in Postgres als een SQL-extensie - er is geen aparte GraphQL-server om te implementeren, in tegenstelling tot Hasura en PostGraphile.
  • De wrapperfunctie van Aurabase is SECURITY INVOKER: uw RLS-beleid wordt automatisch toegepast, zonder dat er een tweede toestemmingssysteem parallel moet worden onderhouden.
  • Alleen opt-in-activering per project – aura projects graphql-enable of de Studio – wordt nooit standaard geactiveerd, voor geen enkel project.
  • Hasura heeft zijn focus in juni 2025 officieel opnieuw gericht op PromptQL en AI-agents, zonder zijn GraphQL-engine op te geven.
  • PostGraphile v5 werd algemeen beschikbaar op 24 maart 2026 – een directe en actieve concurrent, geen sluimerend project.
#
Overzicht

pg_graphql, in één zin

pg_graphql onderzoekt uw SQL-schema en genereert een GraphQL-schema dat voldoet aan de Relay-conventie: <table>Collection, edges, node, filters op kolomtype, paginering op cursor. Geen SDL om handmatig te schrijven of te onderhouden: het GraphQL-schema volgt uw Postgres-schema.

Het punt dat van belang is voor de architectuur: deze schemagenerator leeft in de database, als een SQL-functie, niet als een HTTP-proces ernaast. Aurabase pint de 1.6.1 versie van de extensie (uitgebracht op 7 mei 2026) in de Postgres-image — hetzelfde officiële .deb-pakket zoals gedistribueerd door Supabase. Het wordt zowel op het gedeelde cluster als op de speciale Postgres-instanties geïnstalleerd.

Als u van Supabase komt, waar pg_graphql al lange tijd native is ingeschakeld, zal de logica u bekend voorkomen. Onze gedetailleerde vergelijking en onze migratiegids behandelen de rest van het RLS-schema en het beleid, die hetzelfde blijven.

#
Context 2026

Wat is er veranderd bij Hasura en PostGraphile

Geen van de twee historische concurrenten van “instant GraphQL op Postgres” is verdwenen. Hun positionering is veranderd, en een bijgewerkt artikel zou dat moeten weerspiegelen in plaats van de toestand van twee jaar geleden te citeren.

Hasura publiceerde in juni 2025 een bericht met de expliciete titel, “From GraphQL to PromptQL: A New Chapter Begins”, ondertekend door mede-oprichter Tanmai Gopal. De boodschap: het bedrijf heroriënteert zijn roadmap op PromptQL, een laag voor gegevenstoegang die is ontworpen voor AI-agenten. De GraphQL-engine is niet verwijderd - Hasura's startpagina presenteert deze nog steeds als "door de strijd getest" - maar het is niet langer het prioriteitsbericht.

PostGraphiledeed op zijn beurt het tegenovergestelde. De versie 5, die sinds 2023 in ontwikkeling is in de vorm van bèta's, werd algemeen beschikbaar op 24 maart 2026, met een nieuwe engine voor queryplanning genaamd Grafast. Dit is geen project dat opraakt: de laatste release, 5.1.4, dateert van 5 augustus 2026. Het npm-pakket telde alleen al in de week van 16 tot 22 augustus 2026 119.230 downloads (npm-register, geraadpleegd op 23 augustus 2026).

Astuce

Praktisch gevolg: de echte lege ruimte is niet “GraphQL op Postgres, niemand raakt het aan” – het is het specifieke GraphQL zero-config slot, geactiveerd in één opdracht, zonder dat er een service hoeft te worden gehost. Hasura wijkt ervan af door strategische keuze; PostGraphile heeft zich er nooit op gericht, het model blijft “Node.js-bibliotheek om jezelf te integreren”.

#
Architectuur

Waar elke oplossing daadwerkelijk om draait

Het verschil dat al het andere structureert – bedrijfskosten, aanvalsoppervlak, latentie – is waar de GraphQL-engine draait.

Waar het draaitSQL-extensie, in PostgresAparte GraphQL-server (Go), vóór PostgresNode.js-bibliotheek/server, vóór Postgres
Implementatie vereistGeen — geactiveerd door een projectvlagJa: host en schaal de Hasura-engineJa: host het Node-proces of integreer het met uw server
MachtigingsmodelLegacy Postgres RLS (VEILIGHEIDSINVOKER)Hasura's eigen machtigingssysteem, per rol/tabelRLS Postgres via pgSettings – ook native delegatie
Standaard introspectieUitgeschakeldAfhankelijk van de motorconfiguratieAfhankelijk van de serverconfiguratie
Positionering 2026Native optie van een Postgres BaaSSinds juni 2025 opnieuw gericht op PromptQL/IAGA v5 sinds maart 2026, actief project
AURABASHASURAPOSTGRAFISCHE V5

Om eerlijk te zijn: PostGraphile delegeert ook autorisatie aan Postgres via pgSettings en het wisselen van rollen - native RLS is niet exclusief voor pg_graphql. Wat anders blijft, is wie deze bridge host en configureert: bij PostGraphile ben jij het; bij Aurabase is dit al gedaan.

#
Onder de motorkap

Hoe Aurabase pg_graphql activeert voor een project

Activering is opt-in, per project, en gereserveerd voor Postgres-engineprojecten - een MongoDB-project weigert het verzoek (GRAPHQL_UNSUPPORTED_ENGINE), waarbij pg_graphql een Postgres-extensie is zonder equivalent op de andere engine.

Via de CLI of door direct het beheerplan op te roepen:

terminalbash
# Idempotent: het oproepen van een reeds geactiveerd project creëert niets opnieuw
aura projects graphql-enable <project_id>

# HTTP-equivalent (beheervlak, JWT-console)
curl -X POST "$AURA_CONTROL_URL/v1/control/projects/$PROJECT_ID/graphql/enable" \
  -H "Authorization: Bearer $CONSOLE_JWT"

Aan de serverzijde voert de aanroep een graphql_enable-taak uit die de provisioner in één enkele transactie uitvoert: installatie van de extensie, creatie van de graphql()-functie in uw schema, GRANTs voor de applicatierollen. Als een stap mislukt, wordt alles geannuleerd. Er wordt nooit een wrapper halverwege geïnstalleerd, en graphql_enabled wordt pas na volledig succes verplaatst naar true.

Het werkt zowel op het gedeelde Postgres-cluster als op een speciale CNPG-instantie per project: twee verschillende Postgres-images, maar hetzelfde uitbreidingsmechanisme. Op speciale instanties wordt de extensie geïnstalleerd via het declaratieve manifest van de CNPG-operator in plaats van directe SQL – een recente correctie. Een speciaal cluster draait zonder applicatie-superuser-toegang, en pg_graphql vereist precies dit recht voor zijn CREATE EXTENSION.

Vanuit Studio gaat dezelfde stroom via het tabblad Tabelconfiguratie. Een knop daar activeert de extensie op projectniveau – dezelfde HTTP-oproep als hierboven, met polling tot convergentie. Een tweede besturingselement stelt vervolgens een @graphql-instructie per tabel in, om totalCount en de aggregatievelden in de GraphQL-verzameling wel of niet te activeren, zonder de editor te verlaten.

Weergave met één opdracht: activering → voorzien van taak met threads (idempotent, no-op indien al actief) → DDL-transactie (extensie, wrapper-functie, GRANTs) → vlag graphql_enabled alleen ingesteld na volledig succes → verzoeken mogelijk via /rpc/graphql.

#
Beveiliging

Legacy RLS, geen tweede systeem om te onderhouden

De door Aurabase ingestelde functie is SECURITY INVOKER – standaardgedrag van Postgres, zo uitgelegd dat een toekomstige refactor dit niet per ongeluk verandert. Het werkt met de rechten van de daadwerkelijke beller (aura_anon, aura_authenticated of aura_service_role, afhankelijk van de JWT-claim), dus uw RLS-beleid is precies van toepassing op een REST-verzoek.

Waarom niet BEVEILIGINGSDEFINER

Een functie SECURITY DEFINER zou de volledige RLS omzeilen - intern gecontroleerd: het aanroepen van graphql.resolve onder een superuser-verbinding zonder de applicatierol te veranderen, retourneert de rijen van alle eigenaren, RLS of niet. Precies het cross-tenant risico dat deze keuze vermijdt.

Bij Hasura is de architectuur verschillend qua constructie: de engine converteert elke GraphQL-query naar een SQL-query, beperkt door toestemmingsregels die specifiek zijn voor Hasura. Deze regels worden per rol en per tabel in een eigen laag gedefinieerd: een systeem dat parallel loopt aan de Postgres RLS, en niet een delegatie ernaar. Twee plaatsen om de toegangsregels te controleren, in plaats van slechts één.

Introspectie ({ __schema { ... } }) blijft standaard uitgeschakeld voor elk Aurabase-project – een houding die consistent is met de rest van het platform. Het kan via een schema worden geactiveerd via COMMENT ON SCHEMA als een tool als Apollo Studio of graphql-codegen dit nodig heeft.

#
Handleiding

Schakel in en voer vervolgens een query uit op uw GraphQL API

Zodra graphql_enabled naar trueverschijnt, verschijnt er geen speciale /graphql-route op de gateway. Het verzoek gaat via de generieke RPC-proxy, net als elke Postgres-functie die vanuit de SDK wordt aangeroepen.

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 } } } }"}'

Het antwoord volgt de GraphQL-specificatie — { data, errors } — zonder extra Aurabase-wrapping: de gateway detecteert dat de beoogde RPC graphql is en verpakt deze niet opnieuw, in tegenstelling tot een gewone RPC. Een standaard GraphQL-client (Apollo, urql, graphql-request) verbruikt de uitvoer zoals deze is.

Bij activering worden standaard twee instellingen ingesteld via een @graphql-instructie in het diagram: max_rows: 1000 en inflect_names: true. pg_graphql beperkt zich standaard tot 10.000 rijen per verzameling. Zonder first:kan een grote tabel het geheugen verzadigen. inflect_names geeft leesbare typenamen in plaats van de onbewerkte snake_case van SQL-tabellen.

#
Grenzen

Wat pg_graphql (nog) niet doet

Om te documenteren in plaats van verborgen, in de geest van deze blog.

  • Geen native GraphQL-abonnementen. pg_graphql heeft betrekking op zoekopdrachten en mutaties, niet op realtime subscriptions — dit is een beperking van de extensie zelf, geen weglating van Aurabase. Real-time Aurabase bestaat, maar via een apart kanaal (postgres_changes), en niet via een GraphQL-abonnementsbrug.
  • Geen declaratieve acties à la Hasura. Het model “zakelijke webhook verbonden met een GraphQL-mutatie” heeft geen direct equivalent: op Aurabase gaat deze logica via een Postgres-functie of een Edge-functie, niet via een speciale GraphQL-configuratie.
  • Gereserveerd voor de Postgres-engine. Een MongoDB-project kan dit niet inschakelen - er is geen oplossing voor bedoeld.
Info

Waarom activering opt-in blijft in plaats van standaard: het gebied GRANT/Roles van de tenantdatabase heeft een gedocumenteerde geschiedenis van regressies. Dit is voldoende om te rechtvaardigen dat geen enkele functionaliteit hieraan raakt zonder expliciete validatie, project voor project, voordat een breder defect wordt overwogen.

#
Besluit

Aurabase, Hasura of PostGraphile: afhankelijk van uw context

Alle drie de opties zijn legitiem: de juiste keuze hangt af van wat je al hebt en wat je wilt vermijden.

  • pg_graphql op Aurabase — als uw RLS-database en -beleid al op Aurabase staan en u een tweede manier wilt om er query's op uit te voeren zonder extra services om te controleren.
  • Hasura — als u meerdere gegevensbronnen (niet alleen Postgres) achter één enkel GraphQL-schema bundelt, of als PromptQL en de AI-agentbenadering ervan in uw roadmap passen.
  • PostGraphile v5 — als u nauwkeurige controle wilt over het schema dat is gegenereerd via het plug-insysteem, en u al een Node.js-server gebruikt waarin u deze kunt integreren.

Voor de volledige syntaxis van de query (filters op kolomtype, orderBysorteren, paginering op cursor, insertInto<Table>Collection mutaties) zie de officiële pg_graphqldocumentatie. De Aurabase GraphQL-documentatie hieronder beschrijft ook de volledige cyclus.

KLAAR VOOR IMPLEMENTATIE?

Uw backend in vijf minuten.

Geen creditcard vereist · 500 MB gratis · 50.000 MAU