nexus-db: initdb unter LANG=C erzeugt SQL_ASCII-DB → psycopg3 liefert bytes, SQLAlchemy crasht (UTF-8 erzwingen + Check) #8

Closed
opened 2026-06-13 01:06:25 +02:00 by l.kirchner · 0 comments
Owner

Realer Vorfall (2026-06-13, nexus K-104-Inbetriebnahme): Der nexus-db-LXC wurde vor dem K-114-locale-Fix provisioniert. initdb (PGDG-Paketinstallation) lief unter LANG=C → Cluster/DB entstand mit SQL_ASCII-Encoding. Folge: psql funktioniert unauffällig (reicht Bytes durch), aber psycopg3 liefert bei SQL_ASCII Text als bytes — SQLAlchemy crasht bei der Server-Versions-Erkennung (TypeError: cannot use a string pattern on a bytes-like object), die App meldet db: unreachable. Diagnose kostete eine Debug-Session; behoben durch locale-gen + DB-Neuanlage mit ENCODING 'UTF8'.

Härtung für install/nexus-db-install.sh (und als Muster für künftige DB-Installer):

  1. setup_base_apt muss die Locale vor der PostgreSQL-Installation fixen (seit K-114 vorhanden — hier zusätzlich verifizieren, dass sie zum initdb-Zeitpunkt aktiv ist, nicht nur generiert).
  2. Explizit statt implizit: DB-Anlage mit ENCODING 'UTF8' LC_COLLATE/LC_CTYPE 'en_US.UTF-8' TEMPLATE template0 — unabhängig vom Cluster-Default.
  3. Post-Install-Check ins Script: SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname='nexus' muss UTF8 liefern, sonst Abbruch mit Fehlermeldung.
  4. README/Wiki-Lesson ergänzen.

Lesson fürs Lessons-Log: "Encoding wird bei initdb eingefroren — eine kaputte Locale zur Installationszeit ist ein Datenbank-Schaden, kein Schönheitsfehler."

**Realer Vorfall (2026-06-13, nexus K-104-Inbetriebnahme):** Der nexus-db-LXC wurde vor dem K-114-locale-Fix provisioniert. `initdb` (PGDG-Paketinstallation) lief unter `LANG=C` → Cluster/DB entstand mit **SQL_ASCII**-Encoding. Folge: psql funktioniert unauffällig (reicht Bytes durch), aber **psycopg3 liefert bei SQL_ASCII Text als `bytes`** — SQLAlchemy crasht bei der Server-Versions-Erkennung (`TypeError: cannot use a string pattern on a bytes-like object`), die App meldet `db: unreachable`. Diagnose kostete eine Debug-Session; behoben durch locale-gen + DB-Neuanlage mit `ENCODING 'UTF8'`. **Härtung für `install/nexus-db-install.sh` (und als Muster für künftige DB-Installer):** 1. `setup_base_apt` muss die Locale **vor** der PostgreSQL-Installation fixen (seit K-114 vorhanden — hier zusätzlich verifizieren, dass sie zum initdb-Zeitpunkt aktiv ist, nicht nur generiert). 2. Explizit statt implizit: DB-Anlage mit `ENCODING 'UTF8' LC_COLLATE/LC_CTYPE 'en_US.UTF-8' TEMPLATE template0` — unabhängig vom Cluster-Default. 3. Post-Install-Check ins Script: `SELECT pg_encoding_to_char(encoding) FROM pg_database WHERE datname='nexus'` muss `UTF8` liefern, sonst Abbruch mit Fehlermeldung. 4. README/Wiki-Lesson ergänzen. Lesson fürs Lessons-Log: *"Encoding wird bei initdb eingefroren — eine kaputte Locale zur Installationszeit ist ein Datenbank-Schaden, kein Schönheitsfehler."*
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: luki-net/proxmox-scripts#8