Stored Procedures in Postgres testen — warum PL/pgSQL erst beim Aufruf scheitert und was ein Test dafür aufbauen muss

Ein Klick auf „Duplizieren“ in der Projektliste, ein roter Hinweis „Das Projekt konnte nicht dupliziert werden“, sonst nichts. Im Server-Log steht der Grund: Eine Prozedur liest eine Spalte, die es seit fünf Monaten nicht mehr gibt. In diesen fünf Monaten lief der Deploy auf vier Umgebungen grün durch, die Produktion eingeschlossen. Der Konventions-Check hatte nichts … Weiterlesen

Warum sqlfluff unsere SQL-Konventionen nicht prüfen kann — ein eigener Guard in 240 Zeilen

Die Konventionen standen fest: Prozedur-Skelette, DECLARE-Banner, Datei-Naming, verbotene Konstrukte — alles versioniert in Regel-Dateien, jede Regel mit Begründung. Offen war nur noch die Frage, mit welchem Werkzeug sich die SQL-Konventionen prüfen lassen. Und der erste Reflex hieß, wie vermutlich in jedem Postgres-Team mit Konventions-Ambition: „Nimm doch sqlfluff, das ist doch genau dafür da.“ Drei reale … Weiterlesen

Datenbank-CI/CD mit PostgreSQL — der komplette Lebenszyklus vom Objekt-File bis zum automatischen Deploy

In vielen Projekten lebt das Datenbank-Schema in der Datenbank statt im Repository — gewachsen aus Jahren von Hand-ALTERs, vollständig dokumentiert nirgends. Auffallen tut das erst, wenn eine zweite Umgebung entstehen soll oder ein Deploy zerbricht. Datenbank-CI/CD dreht das Verhältnis um: Das Repository beschreibt den Soll-Zustand, und jede Umgebung — von der Wegwerf-Datenbank im CI bis zur Produktion … Weiterlesen

GitHub Actions für Postgres-Deploys — mit Wegwerf-Datenbank als Qualitäts-Gate

Der Fehler war ein Tippfehler in einem ALTER TABLE — gefunden hat ihn der Staging-Deploy am Freitagnachmittag. Dabei ist genau dieser Fund automatisierbar: Wer den Postgres-Deploy über GitHub Actions gegen eine Wegwerf-Datenbank fährt, macht aus jedem Pull Request einen vollständigen Probelauf. Syntax- und Semantik-Fehler, Reihenfolge-Probleme und kaputte Idempotenz fallen dann vor dem Merge auf — nicht auf Staging. Das … Weiterlesen

Schema-Änderungen tracken ohne Framework — Run-once-Skripte, Checksummen und Immutabilität

Der Backfill lief beim zweiten Deploy noch einmal — und hat Werte überschrieben, die in der Zwischenzeit fachlich korrigiert worden waren. Solche Unfälle verhindert keine Disziplin, sondern nur ein Gedächtnis: Wer Schema-Änderungen tracken will, ohne gleich Flyway oder Liquibase einzuführen, braucht dafür genau eine Tabelle und rund 40 Zeilen Shell — und trifft dabei dieselben vier Design-Entscheidungen, … Weiterlesen

NOT-NULL-Spalte nachträglich hinzufügen — das Expand/Contract-Muster für befüllte Tabellen

Lokal lief der ALTER TABLE sauber durch — auf Staging bricht derselbe Deploy mit column „country_code“ of relation „customer“ contains null values. Der Unterschied ist nicht das SQL, sondern die Daten: Die lokale Tabelle war leer, die auf Staging nicht. Wer eine NOT-NULL-Spalte nachträglich zu einer befüllten Tabelle hinzufügen will, braucht mehr als ein Statement — er braucht die richtige … Weiterlesen