# Runbook: Backup und Restore

PRX-26. Owner (provisorisch): Elena Weiss (DevOps/Platform Lead).

## Geltungsbereich

Betrifft ausschließlich die Datenbank `procurex_db` in der **geteilten** `enterprise-infrastructure`-Postgres-
Instanz. PROCUREX-Anwendungscontainer selbst sind zustandslos (kein PersistentVolume), daher kein
Anwendungs-Backup nötig.

## Backup

```
docker exec -e PGPASSWORD=<passwort> shared-postgres pg_dump --username procurex_user \
  --dbname procurex_db --format=custom --file=/tmp/procurex_db.dump
docker cp shared-postgres:/tmp/procurex_db.dump ./procurex_db_$(date +%Y%m%d).dump
```

## Restore

```
docker cp ./procurex_db_<datum>.dump shared-postgres:/tmp/procurex_db.dump
docker exec -e PGPASSWORD=<admin-passwort> shared-postgres pg_restore --username admin \
  --dbname procurex_db --clean --if-exists /tmp/procurex_db.dump
```

**Wichtig:** `--dbname procurex_db`, niemals `--dbname postgres` (das ist die Bootstrap-Datenbank
der geteilten Instanz, siehe `shared/enterprise-infrastructure/postgres/init-project-databases.sh` — ein Restore
gegen die falsche Datenbank würde andere Lernprojekte gefährden, siehe Risiken unten).

**Testnachweis:** Nicht live durchgeführt in dieser Runde (kein Testdatenbestand vorhanden, alle
Tabellen sind aktuell leer). Befehle basieren auf dem in `shared/enterprise-infrastructure/README.md` dokumentierten
Zugriffsmuster (siehe `procurex-app/README.md`, Abschnitt "enterprise-infrastructure anbinden") und wurden
gegen die reale Instanz nur für DB/User-Anlage (nicht Backup/Restore) verifiziert.

## Risiken

- Die Postgres-Instanz ist **geteilt** mit anderen Lernprojekten (aktuell nur `keycloak_db`
  zusätzlich zu `procurex_db`). Ein `docker compose down -v` auf `enterprise-infrastructure` würde **alle**
  Projekte gleichzeitig betreffen — niemals ohne Rücksprache ausführen (siehe Confluence Seite 12,
  Betriebsregeln).
- Kein automatisiertes/geplantes Backup eingerichtet — rein manueller Prozess, Lernprojekt-Status.

## Eskalation

Restore schlägt fehl oder Datenintegrität fraglich: Incident-Runbook (`incident.md`) folgen,
zusätzlich Rücksprache vor jeder Aktion, die andere Projekte in `enterprise-infrastructure` betreffen könnte.
