# Konfiguration von PostgreSQL

> Die Umgebungsvariablen von PostgreSQL für Passwort, Benutzer, Datenbankname, Zeitzone und Speicherort der Daten.

PostgreSQL läuft im offiziellen Docker-Image. Die Variablen sind also die des Images, eigenen Code bringt SOLECTRUS hier nicht mit. Der Container ist nur im Docker-Netzwerk erreichbar, von außen führt kein Weg zur Datenbank.

## Umgebungsvariablen

### `POSTGRES_PASSWORD`<span class="badge required"></span>

Passwort des Datenbank-Benutzers. Ohne Wert bricht PostgreSQL beim ersten Start mit einer Fehlermeldung ab. Das Dashboard und der [Power-Splitter](/docs/referenz/power-splitter/) melden sich damit an, bei ihnen heißt die Variable `DB_PASSWORD`. Die Werte müssen übereinstimmen.

PostgreSQL legt das Passwort beim ersten Start in seinem Datenverzeichnis ab. Ein späterer Wechsel in der Konfiguration ändert es dort nicht: Die Datenbank bleibt beim alten Passwort, das Dashboard versucht es mit dem neuen, und die Anmeldung schlägt fehl.

```properties title="Beispiel"
POSTGRES_PASSWORD=my-secret-db-password
```

> **HELIOS**
>
>
> HELIOS erzeugt das Passwort bei der Installation zufällig. Einzustellen gibt es nichts.
>

### `POSTGRES_USER`<span class="badge optional"></span>

Benutzer, den PostgreSQL beim ersten Start anlegt. Standardwert ist `postgres`. Er ist zugleich Superuser der Datenbank.

Der Name muss zu dem passen, mit dem sich das Dashboard anmeldet (`DB_USER`). Ein abweichender Wert lässt beide auseinanderlaufen, denn der Benutzer aus `DB_USER` existiert dann nicht. Auch der Healthcheck des Containers fragt mit `pg_isready -U postgres` nach.

```properties title="Beispiel"
POSTGRES_USER=postgres
```

> **HELIOS**
>
>
> HELIOS setzt die Variable nicht. Es bleibt beim Standardwert `postgres`, mit dem sich auch das Dashboard anmeldet.
>

### `POSTGRES_DB`<span class="badge optional"></span>

Datenbank, die PostgreSQL beim ersten Start anlegt. Standardwert ist der Name aus `POSTGRES_USER`, also `postgres`.

Mit dieser Datenbank arbeitet das Dashboard allerdings nicht. Es legt bei seinem ersten Start eine eigene an, `solectrus_production`, und die ist von `POSTGRES_DB` unabhängig. Ein anderer Wert benennt sie also nicht um, er entscheidet nur darüber, welche leere Datenbank daneben liegt.

```properties title="Beispiel"
POSTGRES_DB=solectrus
```

> **HELIOS**
>
>
> HELIOS trägt fest `solectrus` ein. Einzustellen gibt es nichts.
>

### `PGDATA`<span class="badge optional"></span>

Verzeichnis im Container, in dem PostgreSQL seine Dateien ablegt. Ohne die Variable gilt der Standardpfad von PostgreSQL, und der hängt von der Major-Version ab: `postgres:17` und älter legen die Daten in `/var/lib/postgresql/data` ab, `postgres:18` in `/var/lib/postgresql/18/docker`.

Der Pfad muss innerhalb des Volumes liegen, das `DB_VOLUME_PATH` in den Container mountet. Zeigt er woandershin, schreibt PostgreSQL in das Dateisystem des Containers. Die Datenbank ist dann verloren, sobald der Container neu erzeugt wird.

```properties title="Beispiel"
PGDATA=/var/lib/postgresql/data/pgdata
```

> **HELIOS**
>
>
> HELIOS setzt die Variable normalerweise nicht, sondern mountet das Volume genau dorthin, wo PostgreSQL seine Daten erwartet. Nur aus einer übernommenen Installation, die `PGDATA` bereits gesetzt hatte, übernimmt HELIOS den Wert unverändert. Beim Upgrade auf eine neue Major-Version fällt er wieder weg.
>

### `DB_VOLUME_PATH`<span class="badge required"></span>

Pfad, in dem die Datenbank gespeichert wird. Er geht nicht an PostgreSQL selbst, sondern an Docker, das ihn als Volume in den Container mountet. Er sollte auf einem Datenträger mit ausreichend Speicherplatz liegen.

Was hier steht, entscheidet über alles Weitere: Liegt am Pfad schon eine Datenbank, startet PostgreSQL mit dieser weiter. Ist das Verzeichnis leer, legt PostgreSQL eine neue an. Nur dann greifen `POSTGRES_PASSWORD`, `POSTGRES_USER` und `POSTGRES_DB`. Bei jedem weiteren Start ignoriert PostgreSQL sie.

```properties title="Beispiel"
DB_VOLUME_PATH=/somewhere/solectrus/postgresql
```

> **HELIOS**
>
>
> HELIOS legt den Pfad bei der Installation fest, standardmäßig auf den Unterordner `postgresql` im Installationsverzeichnis. Unter _Konfiguration → Grundeinstellungen → Speicherorte_ zeigt HELIOS ihn an, ändern lässt er sich dort nicht.
>

### `TZ`<span class="badge optional"></span>

Zeitzone gemäß [Liste](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Standardwert ist `UTC`.

Sie betrifft ausschließlich die Zeitstempel im Protokoll des Containers. Die gespeicherten Daten liegen in UTC, daran ändert `TZ` nichts.

```properties title="Beispiel"
TZ=Europe/Berlin
```

> **HELIOS**
>
>
> HELIOS fragt die Zeitzone unter _Konfiguration → Grundeinstellungen → PV-Anlage_ ab, vorbelegt mit `Europe/Berlin`.
>
