# Höll schemat korrekt genom 1 022 migreringar med en CI‑grind som bygger databasen på båda sätten — en ny installation, och en installation plus varje migrering — och fäller när de två skiljer sig åt.

2025

**Situation.** Ett schema beskrivs två gånger i de flesta projekt: en gång av den initiala uppsättningen som bygger det från grunden, och en gång av de ackumulerade migreringar som fick det att växa. Båda ska ge samma databas. Ingenting verifierar att de gör det, så de glider isär — och glidningen syns inte förrän en ny miljö beter sig annorlunda än produktionen, oftast i sämsta tänkbara ögonblick.

**Uppgift.** De två beskrivningarna måste bevisligen vara identiska, automatiskt, i stället för att man då och då tror att de är det.

**Handling.** Databasen är versionshanterad som 1 022 migreringar, numrerade från 036 till 1102, och ordningsdisciplinen kring dem är oglamorös och inte förhandlingsbar. Det som får det att hålla är ett CI‑jobb som bygger databasen två gånger vid varje ändring: en gång från det färska initiala schemat, en gång från det initiala schemat plus samtliga migreringar körda i ordning — och sedan jämför de två. Inte bara strukturen, som är den enkla halvan, utan även grunddata, eftersom en migrering som fyller i en uppslagstabell i efterhand på fel sätt är precis lika skadlig som en som glömmer en kolumn, och bara en av dem syns i en schemadiff. Varje avvikelse får bygget att fallera, med skillnaden utskriven.

**Resultat.** En ny miljö och en långlivad miljö är samma databas, och det verifieras i stället för att antas. Kostnaden hamnar hos den som skriver en migrering: den måste fungera när den spelas upp i ordning och den måste fungera från noll, vilket kräver mer eftertanke än en snabb ALTER brukar få. Det är just poängen — alternativet är att upptäcka det under en återställning, när svaret spelar roll och det inte finns tid att lista ut det.

---

- Roll: Databasingenjör
- Kategorier: [Databaser](https://engineer.company/sv/categories/databases/), [PostgreSQL](https://engineer.company/sv/categories/postgresql/), [Datastyrning](https://engineer.company/sv/categories/data-governance/), [DevOps](https://engineer.company/sv/categories/devops/), [Tillförlitlighet och säkerhetskopiering](https://engineer.company/sv/categories/reliability/), [Migrering och modernisering](https://engineer.company/sv/categories/migration/), [Test och kvalitetssäkring](https://engineer.company/sv/categories/testing/)
- Tjänster: [Databasadministration (DBA)](https://engineer.company/sv/services/database-administration/), [Databasmigrering och modernisering](https://engineer.company/sv/services/database-migration/), [DevOps och CI/CD‑automatisering](https://engineer.company/sv/services/devops-cicd/)

<https://engineer.company/sv/portfolio/kept-the-schema-honest-across-1022-migrations-99/>
