Skip to content

Datamigreringer

Kører én navngiven datamigrering, der følger med en ny version.

Sådan fungerer det

Nogle ændringer kan ikke laves med SQL: at omskrive hændelsesdata til et nyt binært format, at rette gamle data til eller at genberegne afledte felter. Hver af den slags ændringer følger med applikationen som en programmeret migrering — en opgave.

Du kører én opgave ad gangen, ved navn. Der er bevidst ingen mulighed for at “køre alt”: at køre alle migreringer på én gang har ingen afgrænsning og går på tværs af alle arbejdsområder, og tidligere kunne det ske, blot fordi et felt blev ladt tomt. Feltet Task er påkrævet, og rullelisten viser præcis de opgaver, som den installerede version indeholder.

En kørsel forløber sådan:

  1. Viser som standard kun en forhåndsvisning — når Apply er slået fra, rapporterer opgaven, hvad den ville ændre, uden at gemme noget. Læs forhåndsvisningen først; det er netop dens formål
  2. Gemmer kun ændringer, når du beder om det — slå Apply til for at gennemføre ændringerne. Formularen kræver, at du sætter flueben ved Jeg forstår, at dette skriver ændringer, der ikke kan rulles tilbage , før den kan sendes, fordi ændringerne gemmes i alle berørte arbejdsområder og ikke kan rulles tilbage
  3. Genopbygger eventuelt projektioner bagefter — en opgave, hvis ændringer projektionerne skal have med, beder om det som et opfølgende job. Når kørslen er færdig, planlægges Genopbyg medarbejderprojektioner som en ny kørsel. Den vises på listen over jobkørsler som en separat række, der først starter, når migreringen er færdig

Hvornår det kører

Jobbet startes altid manuelt. Det starter aldrig af sig selv — hverken efter en tidsplan eller når applikationen starter. Start det under Admin › Jobkørsler, når der er brug for en migrering. Jobbet kan kun køres fra systemets eget arbejdsområde og vises ikke i andre arbejdsområder.

Jobbet starter ikke automatisk, fordi hver kørende kopi af applikationen så ville sætte sin egen kørsel i kø, og flere kørsler, der ændrer de samme data på samme tid, gør databasen langsom.

Parametre

ParameterPåkrævetBetydning
TaskJaDen migrering, der skal køres, valgt blandt de tilgængelige opgaver. En kørsel uden opgave afvises, før der sker noget — det samme gælder et navn, som ikke findes
Apply (default false = dry-run for migrations that support it)NejSlået fra (standard) vises kun en forhåndsvisning for opgaver, der understøtter det; opgaver, der altid gemmer, ser bort fra feltet. Slået til gemmes ændringerne, og det kan ikke fortrydes
Employee (optional, narrow a scoped migration to one employee)NejBegrænser en opgave til én medarbejder — nyttigt til at afprøve den på én medarbejder, før den køres for alle. Opgaver, der altid gennemgår alle data, ser bort fra feltet

API’et accepterer de samme indstillinger og desuden workspace_id, som begrænser en opgave til ét arbejdsområde; formularen har ingen vælger for arbejdsområde.

{"jobs":["migrations"],"options":{"tasks":["<task-name>"]}}
{"jobs":["migrations"],"options":{"tasks":["<task-name>"],"apply":true}}

De indstillinger, en kørsel blev startet med, vises i kolonnen Parametre på listen over kørsler. Kolonnen er skjult som standard — slå den til i kolonnemenuen, så du kan skelne to kørsler af samme job fra hinanden.

Jobresultater

Resultatet indeholder dry_run (det modsatte af Apply) og én nøgle for hver opgave, der kørte:

NøgleBetydning
dry_runtrue, når intet blev gemt — kørslen var kun en forhåndsvisning
appliedOm opgaven faktisk gemte sine ændringer
affected_countHvor mange poster opgaven ændrede eller ville ændre
by_workspaceAntal pr. arbejdsområde med arbejdsområdets navn
detailsDe berørte poster med de før/efter-oplysninger, som opgaven registrerer

Et navn, der ikke svarer til en opgave, vises som "unknown task" ud for navnet.

Når en opgave, der er markeret til at genopbygge projektioner, kører, indeholder resultatet også next_jobs: ["rebuild-employee-projections"], og det job planlægges automatisk.

Kør igen

Alle opgaver kan køres igen, når som helst. Hver opgave springer de data over, der allerede er migreret, så en ny kørsel efter en delvist gennemført kørsel fortsætter, hvor den forrige slap. Kører du en opgave, der allerede er gennemført, sker der intet, og resultatet viser nul berørte poster.

Fejlfinding

ProblemLøsning
“No task selected”Vælg en opgave i feltet Task. Der er ingen mulighed for at køre alt — jobbet kan kun køres ved at angive en opgave
Kørslen melder "unknown task"Navnet findes ikke i den installerede version — oftest en opgave, der siden er fjernet. Vælg på rullelisten i stedet for at skrive et navn
Kør job kan ikke vælgesApply er slået til, og der er ikke sat flueben ved bekræftelsen under den. Læs advarslen, og sæt fluebenet, eller slå Apply fra igen for kun at se en forhåndsvisning
affected_count er 0Opgaven har ingen rækker tilbage at behandle — det normale, når den er gennemført
Fejl under en opgaveÅbn detaljerne for kørslen. Fejl på enkelte rækker vises dér; fejler hele kørslen, skyldes det som regel en alvorlig fejl. Ret dataene, og kør igen
Genopbygningen af projektioner blev ikke startetHvis kørslen ikke blev gennemført (den fejlede undervejs), planlægges det opfølgende job ikke. Ret fejlen, kør opgaven igen, og kør derefter Genopbyg medarbejderprojektioner manuelt, hvis det er nødvendigt