zurück zur Tech-Wiki
Tech-Wiki/Datenbanken
P

PostgreSQL

Objekt-relationale Open-Source-Datenbank mit JSONB, FTS und reicher Erweiterbarkeit.

·PostgreSQL Global Dev Group·PostgreSQL License

Übersicht

Was ist es?

PostgreSQL ist die fortgeschrittenste Open-Source-Relationale-DB — ACID, JSONB, Full-Text-Search, Window-Functions, CTEs, Extensions (PostGIS, pgvector, …). Default für seriöse Backend-Stacks.

Quickstart

# lokal via Docker
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres:16

psql postgres://postgres:postgres@localhost:5432

Oder als Teil von Supabase (supabase start).

Typische Patterns

  • JSONB für flexible Felder, normale Spalten für queryable Daten:
    CREATE TABLE events (id uuid PRIMARY KEY, type text, payload jsonb);
    CREATE INDEX ON events USING gin (payload);
    
  • Row-Level-Security für Multi-Tenant / Supabase.
  • generated always as-Columns für berechnete Werte.
  • CTEs + Window-Functions statt Application-Side-Loops:
    SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY created_at DESC) FROM ...
    
  • EXPLAIN ANALYZE für Query-Tuning — nicht raten, messen.

Gotchas / Was oft schiefgeht

  • NULL ist nicht gleich NULL (= NULL ist immer false) — IS NULL / IS DISTINCT FROM nutzen.
  • Timezone-Bugs: timestamp vs timestamptz. Immer timestamptz und UTC speichern.
  • Fehlender Index auf FK → Joins werden langsam. Postgres legt FK-Indexe nicht automatisch an (anders als MySQL).
  • Connection-Limits: bei vielen Serverless-Functions PgBouncer / Supavisor davor.
  • SELECT * in Production: bricht bei Schema-Änderungen, zieht ungenutzte Spalten.

Wann nicht?

Massive Time-Series-Workloads → TimescaleDB-Extension oder ClickHouse. Pure Key-Value bei extremer Latenz-Anforderung → Redis. Document-first-Modell mit Schemafreiheit → MongoDB.

Eingesetzt in