Eine alte Debatte, neu betrachtet

PostgreSQL oder MySQL – diese Diskussion ist so alt wie moderne Webentwicklung. Beide Datenbanken sind stabil, weit verbreitet und für die meisten Anwendungsfälle grundsätzlich geeignet. Und trotzdem gibt es echte, praxisrelevante Unterschiede, die besonders für Self-Hoster und Entwickler von Bedeutung sind.

Ich habe beide Datenbanken im Einsatz: MariaDB (der Community-Fork von MySQL) in einigen älteren Projekten, PostgreSQL für alle neuen Entwicklungen. Auf meinem Kubernetes-Cluster mit RKE2 laufen beide als Helm-Deployments mit persistentem Storage via Longhorn. Hier ist mein ehrlicher Vergleich aus der Praxis.

Geschichte und Positionierung

MySQL wurde 1995 entwickelt und avancierte schnell zur Standard-Datenbank für LAMP-Stacks. Oracle übernahm MySQL 2010, seitdem gibt es MariaDB als Community-Fork – wer MySQL meint und selbst hostet, nutzt heute meistens MariaDB.

PostgreSQL hat seine Wurzeln in einem Forschungsprojekt der UC Berkeley aus den 1980er Jahren. Die Entwicklung ist vollständig community-gesteuert – keine kommerzielle Entität dahinter, die Einfluss auf die Lizenz nehmen könnte.

Technische Unterschiede, die in der Praxis relevant sind

JSON und Semi-strukturierte Daten

-- PostgreSQL: JSONB (binär gespeichert, vollständig indexierbar)
CREATE TABLE produkte (
  id   SERIAL PRIMARY KEY,
  name VARCHAR(255),
  meta JSONB
);

-- Containment-Abfrage mit GIN-Index
SELECT name FROM produkte
WHERE meta @> '{"sprache": "de"}';

-- Index anlegen
CREATE INDEX idx_produkte_meta ON produkte USING GIN (meta);
-- MySQL 8.0: JSON-Typ vorhanden, aber weniger mächtig
-- Kein direkter GIN-Index auf JSON möglich
-- Umweg über generated columns nötig:
ALTER TABLE produkte
  ADD COLUMN sprache VARCHAR(10)
  GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(meta, '$.sprache'))) STORED;
CREATE INDEX idx_sprache ON produkte (sprache);

PostgreSQLs JSONB ist indexierbar, speichereffizient und bietet deutlich mehr Operatoren. Das ermöglicht es, PostgreSQL als hybride relationale/Dokument-Datenbank zu verwenden – ohne einen separaten MongoDB-Server.

Der große Vergleich auf einen Blick

Feature PostgreSQL MySQL / MariaDB
Lizenz PostgreSQL License (BSD-ähnlich, frei) GPL + kommerzielle Lizenz
SQL-Standard-Konformität Sehr hoch Mittel
JSONB-Support Exzellent, GIN-indexierbar Gut (MySQL 8+), Umwege für Indizes
Volltextsuche Eingebaut, mehrsprachig Eingebaut, weniger konfigurierbar
Window Functions Seit vielen Jahren Seit MySQL 8.0 (2018)
Rekursive CTEs Ja Seit MySQL 8.0
Extensions PostGIS, pg_trgm, pgvector... Plugins (deutlich weniger)
Speicherverbrauch Höher (~50 MB idle) Niedriger (~30 MB idle)
Vendor-Abhängigkeit Keine Oracle (MySQL) / MariaDB Foundation

Self-Hosting auf Kubernetes: Was ich konkret tue

Auf meinem RKE2-Cluster deploye ich PostgreSQL mit dem Bitnami Helm Chart:

# postgresql-values.yaml
auth:
  postgresPassword: "{{ vault_postgresql_password }}"
  database: "strapi"
  username: "strapi"

primary:
  persistence:
    enabled: true
    size: 20Gi
    storageClass: "longhorn"

  resources:
    requests:
      memory: 256Mi
      cpu: 250m
    limits:
      memory: 1Gi
      cpu: 1000m
helm install postgresql bitnami/postgresql \
  -n database \
  --create-namespace \
  -f postgresql-values.yaml

Für Backups nutze ich einen Kubernetes CronJob mit pg_dump, der täglich in MinIO sichert.

Wann welche Datenbank?

Wähle PostgreSQL, wenn:

  • Du ein neues Projekt startest (Greenfield-Entwicklung)
  • Du komplexe Datenstrukturen oder halbstrukturierte JSON-Daten speicherst
  • Du geografische Daten verarbeitest (PostGIS ist unschlagbar)
  • Du AI/ML-Features brauchst (pgvector für Vector Embeddings)
  • Du strikte SQL-Konformität und zuverlässiges Transaktionsverhalten brauchst

MySQL/MariaDB bleibt sinnvoll, wenn:

  • Du ein bestehendes PHP-Legacy-Projekt pflegst
  • Du maximale Kompatibilität mit WordPress, Drupal oder Magento brauchst
  • Du sehr einfache Datenmodelle hast und wenig RAM zur Verfügung steht
  • Das bestehende Team ausschließlich MySQL-Erfahrung hat

Fazit

Für neue Projekte: PostgreSQL, ohne Diskussion.

Ich nutze PostgreSQL für alle aktuellen Projekte auf typoniels.dev – Strapi CMS, eigene APIs, Analyse-Abfragen. Die JSON-Unterstützung, die strikte SQL-Konformität und das Extension-Ökosystem (besonders pg_trgm für Fuzzy-Search und pgvector für KI-Features) machen die Arbeit langfristig deutlich angenehmer.

Ein Punkt, der oft unterschätzt wird: Die Lizenz. PostgreSQL steht unter der PostgreSQL License – keine Oracle-Abhängigkeit, keine dualen Lizenzen. MySQL steht unter GPL plus kommerzieller Lizenz, und Oracle hat in der Vergangenheit gezeigt, wie es mit übernommenen Open-Source-Projekten umgeht.

Wer heute mit einer neuen Datenbank anfängt, sollte direkt PostgreSQL nehmen. Die Lernkurve ist nicht steiler als bei MySQL, die Features sind umfangreicher, und man hat eine völlig freie, community-getriebene Lizenz.