← Alle Artikel
ArchitekturTech

Supabase: PostgreSQL + Auto-REST in 5 Minuten

Borzsport Redaktion · Datenanalyse & Technologie10. März 20268 Min. Lesezeit

Was ist Supabase

Open-Source Backend-as-a-Service auf PostgreSQL-Basis. PostgREST generiert automatisch eine REST API aus dem Schema. Tabelle erstellen → API steht.

Das Stack

  1. PostgreSQL — Die Datenbank. JSONB, Views, Funktionen, RLS.
  2. PostgREST — Generiert REST API aus dem public-Schema.
  3. GoTrue — Authentication Service (hier nicht genutzt — API Key statt JWT).
  4. Realtime — WebSocket-Live-Updates (optional).
  5. Storage — S3-kompatibel für Dateien.

Kritische Gotchas

PostgREST kann kein DDL

ALTER TABLE, CREATE INDEX — nicht möglich über die REST API. Lösung: Supabase Edge Functions mit direkter Postgres-Verbindung über SUPABASE_DB_URL.

Schema-Cache Staleness

Nach DDL-Änderungen sieht PostgREST neue Spalten nicht. Fix: NOTIFY pgrst, 'reload schema' über eine Postgres-Connection senden.

RLS Silent Failure (KRITISCH!)

Wenn Row Level Security einen Write blockt, gibt es keinen Fehler. PostgreSQL gibt einfach 0 Zeilen zurück. .single() wirft dann: “Cannot coerce the result to a single JSON object.” Das ist DER irreführendste Fehler in Supabase.

Lösung: SUPABASE_SERVICE_ROLE_KEY nutzen (umgeht RLS) wenn Auth auf API-Ebene gelöst ist.

Interaktiver Query Builder

Wähle Tabelle, Methode und Key-Typ — sieh wie SDK-Aufrufe zu PostgREST-Requests werden:

INTERAKTIV

PostgREST Query Builder

Wähle Tabelle, Methode und Key-Typ — sieh wie das Supabase SDK die Query aufbaut und welche PostgREST-URL dahintersteckt.

Tabelle
Methode
API Key
Modifiers
Supabase JS SDK
const { data, error } = await supabase
  .from('fighters')
  .select('id, name, elo')
PostgREST HTTP Request
GET https://[project].supabase.co/rest/v1/fighters?select=id,name,elo
Header: apikey: SUPABASE_SERVICE_ROLE_KEY

Fazit

RLS-Policies können Writes ohne Fehlermeldung blockieren. Das Update “funktioniert” — es betrifft nur 0 Zeilen. Die Lösung: SERVICE_ROLE_KEY nutzen oder RLS-Write-Policies auf USING (true) setzen.