PRODPiattaforma BaaS europea sovranaApri Dashboard →

Ingegneria · 10 lettura minima

pg_graphql contro Hasura e PostGraphile su Postgres

Affane Daylami · Fondateur · 31 luglio 2026

Torniamo al blog

Un'API GraphQL su Postgres significa cose molto diverse a seconda dello strumento. PostGraphile distribuisce un server Node separato. Hasura distribuisce un motore GraphQL davanti al tuo database. pg_graphql viene eseguito in Postgres: questo è l'approccio adottato da Aurabase. Questo non è un dettaglio di implementazione: cambia ciò di cui hai bisogno per ospitare, proteggere e mantenere.

Questo testo inglese è stato generato automaticamente dall'originale francese e non è stato ancora rivisto.
Questa pagina è stata tradotta automaticamente. Fa fede la versione inglese.

pg_graphql è un'estensione Postgres open source gestita da Supabase: non è un'invenzione di Aurabase. Ciò che abbiamo costruito è la sua integrazione nativa e opzionale nella piattaforma: una casella da selezionare per progetto, non un servizio da fornire. Questo post descrive in dettaglio l'architettura effettiva, mostra come abilitarla e confronta onestamente i compromessi con Hasura e PostGraphile v5.

L'essenziale
  • pg_graphql esegue in Postgres come estensione SQL: nessun server GraphQL separato da distribuire, a differenza di Hasura e PostGraphile.
  • La funzione wrapper fornita da Aurabase è SECURITY INVOKER: le tue policy RLS si applicano automaticamente, senza un secondo sistema di permessi da mantenere in parallelo.
  • Attivazione con partecipazione solo per progetto — aura projects graphql-enable o Studio — mai attivata per impostazione predefinita, su qualsiasi progetto.
  • Hasura ha ufficialmente rifocalizzato la sua attenzione su PromptQL e sugli agenti AI nel giugno 2025, senza abbandonare il suo motore GraphQL.
  • PostGraphile v5 è diventato disponibile a livello generale il 24 marzo 2026: un concorrente diretto e attivo, non un progetto dormiente.
#
Panoramica

pg_graphql, in una frase

pg_graphql analizza il tuo schema SQL e genera uno schema GraphQL conforme alla convenzione Relay: <table>Collection, edges, node, filtri per tipo di colonna, impaginazione per cursore. Nessun SDL da scrivere o mantenere a mano: lo schema GraphQL segue il tuo schema Postgres.

Il punto che conta per l'architettura: questo generatore di schemi vive all'interno del database, come una funzione SQL, non come un processo HTTP accanto ad esso. Aurabase aggiunge la versione 1.6.1 dell'estensione (rilasciata il 7 maggio 2026) nella sua immagine Postgres — lo stesso pacchetto ufficiale .deb distribuito da Supabase. Viene installato sia sul cluster condiviso che sulle istanze Postgres dedicate.

Se provieni da Supabase, dove pg_graphql è stato abilitato nativamente da molto tempo, la logica ti sarà familiare. Il nostro confronto dettagliato e la nostra guida alla migrazione coprono il resto dello schema e delle policy RLS, che rimangono gli stessi.

#
Contesto 2026

Cosa è cambiato in Hasura e PostGraphile

Nessuno dei due concorrenti storici di “GraphQL istantaneo su Postgres” è scomparso. Il loro posizionamento è cambiato e un articolo aggiornato dovrebbe riflettere questo invece di citare la situazione di due anni fa.

Hasura ha pubblicato un post nel giugno 2025 con il titolo esplicito, “From GraphQL to PromptQL: A New Chapter Begins”, firmato dal suo co-fondatore Tanmai Gopal. Il messaggio: l'azienda sta riorientando la propria roadmap su PromptQL, un livello di accesso ai dati progettato per gli agenti AI. Il motore GraphQL non è stato rimosso – la home page di Hasura lo presenta ancora come “testato in battaglia” – ma non è più il messaggio prioritario.

PostGraphile, da parte sua, ha fatto il contrario. La sua versione 5, in sviluppo dal 2023 sotto forma di beta, è diventata generalmente disponibile il 24 marzo 2026, con un nuovo motore di pianificazione delle query chiamato Grafast. Non si tratta di un progetto in esaurimento: l'ultima versione, la 5.1.4, risale al 5 agosto 2026. Il pacchetto npm ha contato 119.230 download nella sola settimana dal 16 al 22 agosto 2026 (registro npm, consultato il 23 agosto 2026).

Astuce

Conseguenza pratica: il vero spazio libero non è "GraphQL su Postgres, nessuno lo tocca" - è lo specifico slot GraphQL zero-config, attivato in un comando, senza servizio per ospitare. Hasura se ne allontana per scelta strategica; PostGraphile non l'ha mai preso di mira, il suo modello resta “Libreria Node.js per integrarsi”.

#
Architettura

Dove ogni soluzione effettivamente gira

La differenza che struttura tutto il resto (costi operativi, superficie di attacco, latenza) è dove viene eseguito il motore GraphQL.

Dove giraEstensione SQL, in PostgresServer GraphQL separato (Go), di fronte a PostgresLibreria/server Node.js, davanti a Postgres
È richiesta la distribuzioneNessuno: attivato da un flag di progettoSì: ospita e ridimensiona il motore HasuraSì: ospita il processo Node o integralo con il tuo server
Modello di autorizzazioniLegacy Postgres RLS (INVOCATORE DI SICUREZZA)Il sistema di permessi di Hasura, per ruolo/tabellaRLS Postgres tramite pgSettings: anche delega nativa
Introspezione per impostazione predefinitaDisabilitatoA seconda della configurazione del motoreA seconda della configurazione del server
Posizionamento 2026Opzione nativa di un Postgres BaaSRifocalizzazione su PromptQL/IA da giugno 2025GA v5 da marzo 2026, progetto attivo
AURABASEHASURAPOSTGRAFICO V5

Ad essere onesti: PostGraphile delega anche l'autorizzazione a Postgres tramite pgSettings e cambio di ruolo: la RLS nativa non è esclusiva di pg_graphql. Ciò che rimane diverso è chi ospita e configura questo bridge: in PostGraphile sei tu; in Aurabase questo è già stato fatto.

#
Sotto il cofano

Come Aurabase attiva pg_graphql su un progetto

L'attivazione è opzionale, per progetto e riservata ai progetti del motore Postgres: un progetto MongoDB rifiuta la richiesta (GRAPHQL_UNSUPPORTED_ENGINE), essendo pg_graphql un'estensione Postgres senza equivalente sull'altro motore.

Tramite la CLI o chiamando direttamente il piano di gestione:

terminalbash
# Idempotente: richiamare un progetto già attivato non ricrea nulla
aura projects graphql-enable <project_id>

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

Lato server, la chiamata esegue un lavoro graphql_enable che il provisioner esegue in un'unica transazione: installazione dell'estensione, creazione della funzione graphql() nel tuo schema, GRANT ai ruoli dell'applicazione. Se un passaggio fallisce, tutto viene annullato, mai un wrapper installato a metà e graphql_enabled passa a true solo dopo il completo successo.

Funziona sia sul cluster Postgres condiviso che su un'istanza CNPG dedicata per progetto: due diverse immagini Postgres, ma lo stesso meccanismo di estensione. Nelle istanze dedicate, l'estensione viene installata tramite il manifest dichiarativo dell'operatore CNPG anziché tramite SQL diretto: una correzione recente. Un cluster dedicato viene eseguito senza accesso come superutente dell'applicazione e pg_graphql richiede esattamente questo privilegio per il suo CREATE EXTENSION.

Da Studio, lo stesso flusso passa attraverso la scheda Configurazione tabella. Un pulsante attiva l'estensione a livello di progetto: la stessa chiamata HTTP di cui sopra, con polling fino alla convergenza. Un secondo controllo imposta quindi una direttiva @graphql per tabella, per attivare o meno totalCount e i campi di aggregazione sulla sua raccolta GraphQL, senza uscire dall'editor.

Visualizzazione comando singolo: attivazione → provisioning del lavoro in thread (idempotente, no-op se già in volo) → transazione DDL (estensione, funzione wrapper, GRANT) → flag graphql_enabled impostato solo dopo il completo successo → richieste possibili tramite /rpc/graphql.

#
Sicurezza

Legacy RLS, non un secondo sistema da mantenere

La funzione impostata da Aurabase è SECURITY INVOKER — comportamento predefinito di Postgres, spiegato in modo che un futuro refactoring non lo modifichi per sbaglio. Funziona con i privilegi del chiamante effettivo (aura_anon, aura_authenticated o aura_service_role, a seconda dell'attestazione JWT), quindi i tuoi criteri RLS si applicano esattamente come per una richiesta REST.

Perché non SECURITY DEFINER

Una funzione SECURITY DEFINER ignorerebbe l'intero RLS - controllato internamente: chiamando graphql.resolve in connessione da superutente senza modificare il ruolo dell'applicazione restituisce le righe di tutti i proprietari, RLS o meno. Proprio il rischio cross-tenant che questa scelta evita.

In Hasura, l'architettura è diversa per costruzione: il motore converte ogni query GraphQL in una query SQL vincolata da regole di autorizzazione specifiche di Hasura. Queste regole sono definite per ruolo e per tabella nel proprio livello: un sistema parallelo a Postgres RLS, non una delega ad esso. Due posti in cui controllare le regole di accesso, invece di uno solo.

L'introspezione ({ __schema { ... } }) rimane disabilitata per impostazione predefinita su ciascun progetto Aurabase, una postura coerente con il resto della piattaforma. Può essere attivato tramite schema tramite COMMENT ON SCHEMA se uno strumento come Apollo Studio o graphql-codegen ne ha bisogno.

#
Esercitazione

Abilita quindi interroga la tua API GraphQL

Una volta graphql_enabled a true, sul gateway non viene visualizzata alcuna route /graphql dedicata. La richiesta passa attraverso il generico proxy RPC, proprio come qualsiasi funzione Postgres chiamata dall'SDK.

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

La risposta segue le specifiche GraphQL — { data, errors } — senza il wrapper aggiuntivo di Aurabase: il gateway rileva che l'RPC di destinazione è graphql e non lo riavvolge, a differenza di un normale RPC. Un client GraphQL standard (Apollo, urql, graphql-request) consuma l'output così com'è.

Due impostazioni sono impostate di default al momento dell'attivazione, tramite una direttiva @graphql sullo schema: max_rows: 1000 e inflect_names: true. pg_graphql limita per impostazione predefinita a 10.000 righe per raccolta: senza first:, una tabella di grandi dimensioni può saturare la memoria. inflect_names fornisce nomi di tipo leggibili anziché il semplice snake_case delle tabelle SQL.

#
Limiti

Cosa pg_graphql non fa (ancora)

Da documentare e non nascondere, nello spirito di questo blog.

  • Nessun abbonamento GraphQL nativo. pg_graphql copre query e mutazioni, non in tempo reale subscriptions — questa è una limitazione dell'estensione stessa, non un'omissione di Aurabase. Aurabase in tempo reale esiste, ma attraverso un canale separato (postgres_changes), non un bridge di abbonamenti GraphQL.
  • Nessuna azione dichiarativa alla Hasura. Il modello "webhook aziendale connesso a una mutazione GraphQL" non ha un equivalente diretto: su Aurabase, questa logica passa attraverso una funzione Postgres o una funzione Edge, non attraverso una configurazione GraphQL dedicata.
  • Riservato al motore Postgres. Un progetto MongoDB non può abilitare questa funzionalità: non è prevista alcuna soluzione alternativa.
Informazioni

Perché l'attivazione rimane opzionale anziché predefinita: l'area GRANT/Roles del database tenant ha una cronologia documentata di regressioni. Ciò è sufficiente per giustificare che nessuna funzionalità lo tocchi senza una validazione esplicita, progetto per progetto, prima di considerare un difetto più ampio.

#
Decisione

Aurabase, Hasura o PostGraphile: a seconda del contesto

Tutte e tre le opzioni sono legittime: la scelta giusta dipende da ciò che già hai e da ciò che stai cercando di evitare.

  • pg_graphql su Aurabase — se il tuo database RLS e le tue policy sono già presenti su Aurabase e desideri un secondo modo per interrogarlo senza servizi aggiuntivi da monitorare.
  • Hasura: se federa più origini dati (non solo Postgres) dietro un singolo schema GraphQL o se PromptQL e il suo approccio con agente AI si adattano alla tua roadmap.
  • PostGraphile v5 — se desideri un controllo preciso sullo schema generato tramite il suo sistema di plug-in e hai già un server Node.js in cui integrarlo.

Per la sintassi completa della query (filtri per tipo di colonna, ordinamento orderBy, impaginazione per cursore, mutazioni insertInto<Table>Collection) consultare la documentazione ufficiale pg_graphql. Anche la documentazione di Aurabase GraphQL, di seguito, descrive in dettaglio il ciclo completo.

PRONTO PER L'IMPLEMENTAZIONE?

Il tuo backend in cinque minuti.

Nessuna carta di credito richiesta · 500 MB gratuiti · 50.000 MAU