PostgreSQL ist die erste Wahl wenn relationale Daten, JSON-Dokumente, Volltext-Suche und Vektor-Suche in einer Datenbank zusammenkommen sollen. Robust, erweiterbar, kostenlos – und auf jedem Server in Minuten deployt.
SQLpgvectorJSONBDockerBackups
PostgreSQL für Automatisierungen und KI-Projekte
Warum PostgreSQL statt SQLite oder MySQL? Drei überzeugende Gründe für moderne Projekte:
JSONB: JSON-Dokumente als natives Typ speichern und indizieren – relationale und dokumentenbasierte Daten in einer Datenbank. Für n8n-Workflow-Daten ideal.
pgvector: Extension für Vektor-Suche direkt in PostgreSQL – kein separater Vektordatenbank-Service nötig. Für RAG-Systeme und Embeddings der pragmatischste Ansatz wenn schon PostgreSQL läuft.
Full-Text-Search:tsvector und tsquery – deutsche Stemming-Unterstützung eingebaut. Für Suche in eigenen Inhalten ohne Elasticsearch.
-- pgvector: Ähnlichkeitssuche in PostgreSQL
CREATE EXTENSION vector;
CREATE TABLE dokumente (
id SERIAL PRIMARY KEY,
inhalt TEXT,
embedding vector(768)
);
-- Nearest Neighbor Search
SELECT inhalt FROM dokumente
ORDER BY embedding <-> '[0.1, 0.2, ...]'
LIMIT 5;
PostgreSQL mit Docker betreiben
PostgreSQL als Docker Compose-Service ist der Standard für selbst gehostete Setups:
Persistenz: Volume für /var/lib/postgresql/data – ohne Volume gehen Daten beim Container-Neustart verloren
Connection Pooling: PgBouncer als Middleware für Anwendungen die viele kurze Verbindungen öffnen – reduziert PostgreSQL-Last massiv
Backups:pg_dump -Fc datenbankname > backup.dump für konsistente Backups. Automatisiert per Cron, Upload zu S3/Backblaze.
Versionen: Postgres 16 ist aktuell empfohlen. Image: postgres:16-alpine für kleinere Container-Größe
n8n, Gitea, Nextcloud und viele andere Services unterstützen PostgreSQL als Backend – eine Instanz für mehrere Services (separate Datenbanken, separate Nutzer).
Performance und Monitoring
PostgreSQL läuft gut mit Standardkonfiguration – aber ein paar Anpassungen helfen:
shared_buffers: 25% des verfügbaren RAMs. Standard sind 128 MB – auf einem 4-GB-Server sollte es 1 GB sein.
EXPLAIN ANALYZE: Für langsame Queries – zeigt den Execution Plan und wo Zeit verloren geht. pg_stat_statements Extension zeigt die teuersten Queries.
Indizes: Fehlendes Index ist die häufigste Performance-Ursache. CREATE INDEX CONCURRENTLY fügt Indizes ohne Table Lock hinzu.
Monitoring:postgres_exporter für Prometheus-Metriken, Grafana-Dashboard für Visualisierung
Häufige Fragen zu PostgreSQL
SQLite für: Einzel-Nutzer-Apps, Prototypen, wenn die App die einzige ist die auf die Daten zugreift. PostgreSQL für: alles was mehr als einen gleichzeitigen Schreiber hat, wenn pgvector oder JSONB gebraucht wird, oder wenn die App produktiv genutzt wird. Wechsel später ist aufwändig – im Zweifel PostgreSQL.
Direkt im Docker Container: `docker exec -it postgres psql -U username datenbankname`. Von außen: `psql "postgresql://user:pass@host:5432/db"`. Grafisches Tool: DBeaver (kostenlos, alle Plattformen) oder pgAdmin 4 als Docker Container.
Nie Port 5432 direkt ins Internet öffnen. Separate DB-User mit minimalen Rechten pro Anwendung (nur SELECT/INSERT/UPDATE, kein DROP). Starke Passwörter, in `.env`-Datei gespeichert. Backups verschlüsseln bevor sie das Haus verlassen.
Migrations-Tool nutzen: Alembic für Python/SQLAlchemy, Flyway oder Liquibase für Java, Prisma Migrate für Node. Nie Schema direkt in Produktion ändern ohne Migration. Immer Backup vor Migration. Rollback-Migration vorbereiten bevor die Forward-Migration ausgeführt wird.