Datenbank von SQLite auf PostgreSQL umstellen #7

Closed
opened 2026-03-30 17:28:50 +00:00 by Basti · 2 comments
Owner

Beschreibung

Die gesamte Persistenz von SQLite auf PostgreSQL umstellen. SQLite-spezifische Konstrukte entfernen, PostgreSQL-Treiber einbinden und docker-compose um einen PostgreSQL-Service erweitern.

Hintergrund

SQLite eignet sich für Prototyping, hat aber Limitierungen bei concurrent writes, hat keine echten Datentypen für JSON und skaliert nicht für produktiven Multi-User-Betrieb. Mit dem neuen Auth-System und mehreren gleichzeitigen Nutzern wird PostgreSQL notwendig.

Akzeptanzkriterien

  • DATABASE_URL Default auf postgresql://... geändert
  • psycopg2-binary (oder asyncpg) in requirements.txt
  • backend/database.py: SQLite-spezifisches check_same_thread entfernt, Engine-Konfiguration für PostgreSQL
  • backend/api/pipeline.py: julianday() durch PostgreSQL-kompatible Zeitberechnung ersetzt
  • alembic.ini: sqlalchemy.url auf PostgreSQL-URL (aus ENV lesbar)
  • alembic/env.py: render_as_batch entfernen (nur für SQLite nötig)
  • docker-compose.yml: PostgreSQL-Service hinzufügen mit Volume
  • .env.example: DATABASE_URL Beispiel auf PostgreSQL
  • tests/conftest.py: Test-DB auf PostgreSQL oder SQLite als Fallback
  • Alle bestehenden Alembic-Migrationen funktionieren gegen PostgreSQL
  • Alle 66+ Tests bestehen

Technische Hinweise

  • Betroffene Dateien:
    • backend/config.py — Default database_url ändern
    • backend/database.pycheck_same_thread entfernen, Engine-Args anpassen
    • backend/api/pipeline.py:100julianday()EXTRACT(EPOCH FROM ...)
    • alembic.ini:89 — URL auf PostgreSQL
    • alembic/env.pyrender_as_batch=True entfernen, URL aus ENV lesen
    • docker-compose.yml — PostgreSQL-Service + Backend depends_on
    • .env.example — PostgreSQL-URL Beispiel
    • tests/conftest.py — Test-DB-URL anpassen
    • requirements.txtpsycopg2-binary hinzufügen
  • Ansatz: SQLAlchemy-Dialekt wechseln, SQLite-spezifische Funktionen ersetzen
  • Migration nötig: Bestehende Migrationen prüfen/anpassen, neue Migration für PostgreSQL-Kompatibilität falls nötig

Aufwand: L

## Beschreibung Die gesamte Persistenz von SQLite auf PostgreSQL umstellen. SQLite-spezifische Konstrukte entfernen, PostgreSQL-Treiber einbinden und docker-compose um einen PostgreSQL-Service erweitern. ## Hintergrund SQLite eignet sich für Prototyping, hat aber Limitierungen bei concurrent writes, hat keine echten Datentypen für JSON und skaliert nicht für produktiven Multi-User-Betrieb. Mit dem neuen Auth-System und mehreren gleichzeitigen Nutzern wird PostgreSQL notwendig. ## Akzeptanzkriterien - [ ] `DATABASE_URL` Default auf `postgresql://...` geändert - [ ] `psycopg2-binary` (oder `asyncpg`) in `requirements.txt` - [ ] `backend/database.py`: SQLite-spezifisches `check_same_thread` entfernt, Engine-Konfiguration für PostgreSQL - [ ] `backend/api/pipeline.py`: `julianday()` durch PostgreSQL-kompatible Zeitberechnung ersetzt - [ ] `alembic.ini`: `sqlalchemy.url` auf PostgreSQL-URL (aus ENV lesbar) - [ ] `alembic/env.py`: `render_as_batch` entfernen (nur für SQLite nötig) - [ ] `docker-compose.yml`: PostgreSQL-Service hinzufügen mit Volume - [ ] `.env.example`: `DATABASE_URL` Beispiel auf PostgreSQL - [ ] `tests/conftest.py`: Test-DB auf PostgreSQL oder SQLite als Fallback - [ ] Alle bestehenden Alembic-Migrationen funktionieren gegen PostgreSQL - [ ] Alle 66+ Tests bestehen ## Technische Hinweise - Betroffene Dateien: - `backend/config.py` — Default `database_url` ändern - `backend/database.py` — `check_same_thread` entfernen, Engine-Args anpassen - `backend/api/pipeline.py:100` — `julianday()` → `EXTRACT(EPOCH FROM ...)` - `alembic.ini:89` — URL auf PostgreSQL - `alembic/env.py` — `render_as_batch=True` entfernen, URL aus ENV lesen - `docker-compose.yml` — PostgreSQL-Service + Backend `depends_on` - `.env.example` — PostgreSQL-URL Beispiel - `tests/conftest.py` — Test-DB-URL anpassen - `requirements.txt` — `psycopg2-binary` hinzufügen - Ansatz: SQLAlchemy-Dialekt wechseln, SQLite-spezifische Funktionen ersetzen - Migration nötig: Bestehende Migrationen prüfen/anpassen, neue Migration für PostgreSQL-Kompatibilität falls nötig ## Aufwand: L
Basti added
doku
and removed
in work
labels 2026-03-30 19:14:44 +00:00
Author
Owner

Review bestanden

Test Status
Backend Tests (66/66) PASS
PostgreSQL Default Config PASS
SQLite Fallback (check_same_thread) PASS
extract(epoch) Query PASS
psycopg2-binary Import PASS
docker-compose PostgreSQL Service PASS
alembic/env.py ENV Override PASS
.env.example PostgreSQL URL PASS

Label auf doku gesetzt.

## Review bestanden | Test | Status | |------|--------| | Backend Tests (66/66) | PASS | | PostgreSQL Default Config | PASS | | SQLite Fallback (check_same_thread) | PASS | | extract(epoch) Query | PASS | | psycopg2-binary Import | PASS | | docker-compose PostgreSQL Service | PASS | | alembic/env.py ENV Override | PASS | | .env.example PostgreSQL URL | PASS | Label auf `doku` gesetzt.
Author
Owner

Dokumentation aktualisiert. Issue wird geschlossen.

Geänderte Docs:

  • README.md: Datenbank-Abschnitt auf PostgreSQL, DATABASE_URL in Config-Tabelle, Projektstruktur-Kommentar
  • CLAUDE.md: SQLite-Einschränkung durch PostgreSQL-Hinweis ersetzt
Dokumentation aktualisiert. Issue wird geschlossen. Geänderte Docs: - `README.md`: Datenbank-Abschnitt auf PostgreSQL, DATABASE_URL in Config-Tabelle, Projektstruktur-Kommentar - `CLAUDE.md`: SQLite-Einschränkung durch PostgreSQL-Hinweis ersetzt
Basti closed this issue 2026-03-30 19:15:49 +00:00
Sign in to join this conversation.
No description provided.