Skip to content
✅Geprüft90%
Vollständigkeit:
90%
Korrektheit:
90%
✓ Geprüft von Peter König am 15. September 2026

LXC: PostgreSQL/PostGIS ​

Auf der LXC postgresql laufen zwei unabhängige PostgreSQL-Cluster. Jeder hat eine eigene Version, einen eigenen Port, ein eigenes Datenverzeichnis und eine eigene systemd-Unit.

Container-Ressourcen ​

RessourceWert
Hostnamepostgresql
BetriebssystemDebian 13 (trixie)
CPU3 vCPU
RAM2 GiB (1,7 GiB verfügbar)
Swap512 MiB
Root-Filesystem15 GB, 32 % belegt (4,4 GB)

Installierte Software ​

PaketVersion
postgresql-1717.11-1.pgdg12+2
postgresql-1818.6-1.pgdg12+2
postgresql-17-postgis-33.6.4+dfsg-2.pgdg12+1
postgresql-18-postgis-33.6.4+dfsg-2.pgdg12+1

Cluster-Übersicht ​

ClusterPostgreSQLPortsystemd-UnitZweck
17/main17.115433postgresql@17-main.serviceZitadel
18/main18.65432postgresql@18-main.servicep2d2

Beide Cluster teilen sich dieselben grundlegenden Einstellungen: shared_buffers 128 MB, max_connections 100, max_wal_size 1 GB, min_wal_size 80 MB, wal_level replica, ssl aktiv mit Snakeoil-Zertifikat (/etc/ssl/certs/ssl-cert-snakeoil.pem). Sie unterscheiden sich in den Locale-/Timezone-Werten.

Cluster 17/main (Zitadel) ​

EigenschaftWert
Datenverzeichnis/var/lib/postgresql/17/main (88 MB belegt)
Konfiguration/etc/postgresql/17/main/
timezone / log_timezoneEurope/Berlin
lc_messages / lc_monetary / lc_numeric / lc_timeen_US.UTF-8

Datenbanken:

DatenbankGrößeCollation
zitadel_adm7486 kBde_DE.UTF-8
zitadel_prod20 MBen_US.UTF-8

Rollen: postgres (Superuser), zitadel, zitadel_app. Die beiden Zitadel-Rollen sind login-fähig, ohne rolconnlimit.

Extension: nur plpgsql (in beiden Datenbanken).

Schemata in zitadel_prod (Owner zitadel_app): adminapi, auth, cache, eventstore, logstore, projections, queue, system (8 Schemata).

pg_hba.conf:

  • lokaler Socket: peer für postgres und all
  • TCP-Loopback: scram-sha-256
  • WireGuard-Subnetz 10.10.10.0/24: scram-sha-256
  • Server-LAN 192.168.122.0/24: scram-sha-256

Cluster 18/main (p2d2) ​

EigenschaftWert
Datenverzeichnis/var/lib/postgresql/18/main (290 MB belegt)
Konfiguration/etc/postgresql/18/main/
timezone / log_timezoneEtc/UTC
lc_messages / lc_monetary / lc_numeric / lc_timeC

Hinweis zur Textdatei postgresql.conf: Sie enthält zwei Blöcke für data_directory, hba_file, ident_file, cluster_name, port, timezone und weitere. Der erste Block referenziert textlich 17/main-Pfade und C/Etc/UTC-Werte, der zweite überschreibt mit 18/main. PostgreSQL wertet die letzte Direktive, die effektiven Werte sind korrekt (Port 5432, 18/main). Es handelt sich um eine folgenlose Eigenart der Textdatei, vermutlich eine Kopie der Cluster-17-Konfiguration als Ausgangsbasis, die nicht vollständig ersetzt wurde.

Datenbanken:

DatenbankGrößeCollationAnmerkung
data-dna168 MBde_DE.UTF-8Produktions-DB für p2d2, PostGIS

Rollen (16) ​

p2d2-Rollenhierarchie (alle ohne rolconnlimit, also unbegrenzt):

  • P2D2-Admin (login, CREATEROLE, CREATEDB)
  • P2D2-Admin-Role (nologin)
  • P2D2-DE1, P2D2-DE2, P2D2-DEVELOP, P2D2-FV, P2D2-MAIN (login)
  • P2D2-RO (login, read-only)
  • P2D2-RO-Role (nologin)
  • P2D2-User-DE1, P2D2-User-DE2, P2D2-User-DEVELOP, P2D2-User-FV, P2D2-User-MAIN (nologin)
  • P2D2-User-Role (nologin)

p2d2-Schemata in data-dna ​

Alle fünf Schemata gehören P2D2-Admin-Role:

p2d2_de1, p2d2_de2, p2d2_develop, p2d2_fv, p2d2_main.

Objektzählung je Schema:

SchemaTabellenViewsSequencesEnum-TypenFunktionen
p2d2_de1162863
p2d2_de2152762
p2d2_develop152762
p2d2_fv152762
p2d2_main152762

p2d2_de1 hat eine Tabelle mehr (rheinkassel_gf, 14 Zeilen, Altdaten) und eine Funktion mehr (fn_container_mitversionen()). rheinkassel_gf und fn_container_mitversionen() existieren nur in p2d2_de1.

Enum-Typen (identisch in allen fünf Schemata):

EnumWerte
wf_event_type14: session_start, session_pause, session_resume, session_end, session_expire, session_abort, feature_edit, feature_save, snapshot_create, qs1_pass, qs1_fail, qs2_pass, qs2_fail, export_osm
wf_feature_state8: unbearbeitet, in_bearbeitung, qs1_ausstehend, qs1_abgelehnt, qs2_ausstehend, qs2_abgelehnt, exportbereit, exportiert
wf_qs_level2: qs1, qs2
wf_qs_result3: pass, fail, warning
wf_session_state5: active, paused, completed, expired, aborted
wf_snapshot_kind6: auto, manual, session_boundary, pre_qs, post_qs, export

Tabellengrößen (Zeilen, Stand 2026-09-15):

TabelleZeilenAnmerkung
p2d2_graeber47.122identisch in allen fünf Schemata
p2d2_containers1.772identisch in allen fünf Schemata
p2d2_grabflure356identisch in allen fünf Schemata
wf_feature_status342nur in p2d2_de1 befüllt
wf_sessions41nur in p2d2_de1 befüllt
wf_snapshots20nur in p2d2_de1 befüllt

Die Workflow-/Versionstabellen sind nur in p2d2_de1 befüllt. Die Schemata p2d2_de2, p2d2_develop, p2d2_fv und p2d2_main enthalten identische Stammdaten (p2d2_graeber, p2d2_containers, p2d2_grabflure, p2d2_kommunen), aber keine Workflow-Daten.

pg_hba.conf ​

  • lokaler Socket: peer
  • TCP-Loopback: scram-sha-256
  • Server-LAN 192.168.12.0/24 und 192.168.122.0/24: md5
  • WireGuard-Subnetz 10.10.10.0/24: md5
  • host data-dna P2D2-RO 10.10.10.7/32 trust: wirksam, da data-dna existiert

In diesem Cluster gibt es kein pg_hba.conf.bak*. Die Authentifizierung über md5 ist schwächer als scram-sha-256 in Cluster 17, das ist eine reine Feststellung.

PostGIS ​

In data-dna ist die Extension postgis in Version 3.6.1 installiert. Die Paketversion ist 3.6.4. Die Extension-Version hinkt nach, da nach der letzten Paketaktualisierung kein ALTER EXTENSION postgis UPDATE ausgeführt wurde.

Zitadel-Historie ​

Zitadel benötigt zwingend PostgreSQL 17. Es gab mehrere Anläufe, darunter der Versuch, Zitadel selbst zu bauen, der nicht funktionierte. Letztlich kam das Hersteller-Image zum Einsatz. Daraufhin wurde die dedizierte PostgreSQL-17-Instanz (Cluster 17/main) separat aufgesetzt.

Die in Cluster 18 verbliebenen Zitadel-Reste (Datenbank zitadel_prod, Rollen zitadel_admin, zitadel_app, zitadel_ro) sowie die Datenbank opencloud und die Rollen OC-Admin/OC-Admin-Role stammen aus frühen, abgebrochenen Anläufen. Sie wurden am 2026-09-15 entfernt.

Netzwerkzugang ​

Der Container ist nicht öffentlich exponiert. Zugriff erfolgt über das interne LAN und WireGuard.

Verbindungsdaten für Anwendungen:

ZweckHostPortDatenbankRolle
p2d2 (Cluster 18)192.168.122.1105432data-dnaP2D2-*
Zitadel (Cluster 17)192.168.122.1105433zitadel_prod / zitadel_admzitadel / zitadel_app

Read-only-Zugriff auf data-dna ist als P2D2-RO möglich.

Systemd ​

UnitCluster
postgresql@17-main.service17/main
postgresql@18-main.service18/main
bash
systemctl status postgresql@18-main
systemctl restart postgresql@18-main
journalctl -u postgresql@18-main -f --no-pager