Databasemigreringer og skemahåndtering
Forstå værktøjer og strategier til håndtering af ændringer i databaseskemaer og migreringer i Clojure-projekter.
Databasemigreringer og skemahåndtering er en gratis Funktionel programmering i Clojure og backendudvikling på JVM-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Funktionel programmering i Clojure og backendudvikling på JVM, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Funktionel programmering i Clojure og backendudvikling på JVM-kurset indeholder 4 lektioner i alt.
Hvorfor håndtere databaseskemaet?
Hvad sker der, når din applikation ændrer sig? Nye funktioner har ofte brug for nye steder at gemme data eller ændringer i eksisterende datastrukturer. Det er her, håndtering af dit databaseskema bliver relevant.
Et databaseskema fungerer som en plan for din database. Det definerer de tabeller, kolonner, relationer og begrænsninger, der strukturerer dine data.
Efterhånden som din applikation udvikler sig, skal skemaet også gøre det. Manuelle ændringer kan være risikable og inkonsistente på tværs af miljøer.
Databasemigreringer forklaret
Databasemigreringer er versionsstyring for dit databaseskema. Tænk på dem som kode-commits, men for din databasestruktur.
Hver migrering er et sæt instruktioner (normalt SQL), der beskriver, hvordan databasen ændres fra én version til den næste. De får typisk et tidsstempel og anvendes i rækkefølge.
- `up`-script: Anvender en ændring (f.eks. tilføjer en tabel).
- `down`-script: Ruller en ændring tilbage (f.eks. sletter en tabel).
Hvorfor bruge migreringer?
Brug af databasemigreringer giver udviklingsteams flere vigtige fordele:
- Konsistens: Sikrer, at alle udviklere og udrulningsmiljøer har det samme databaseskema.
- Samarbejde: Gør det nemt for flere udviklere at bidrage med skemaændringer uden konflikter.
- Mulighed for tilbagerulning: Gør det nemt at vende tilbage til en tidligere skematilstand, hvis noget går galt.
- Automatisering: Integreres problemfrit i din CI/CD-pipeline til automatiserede udrulninger.
Clojures Migratus-bibliotek
I Clojure-økosystemet er et populært og robust bibliotek til håndtering af databasemigreringer Migratus.
Migratus er fleksibelt og understøtter SQL samt migreringer baseret på Clojure. Det holder styr på anvendte migreringer i din database og sikrer, at de kun køres én gang og i den korrekte rækkefølge.
Det er designet til at være enkelt at konfigurere og bruge og passer godt til Clojures funktionelle tilgang.
Opsætning af Migratus
For at bruge Migratus skal du først tilføje det som en afhængighed og konfigurere det. Her er en typisk opsætning med deps.edn og et konfigurationskort:
Tilføj først afhængigheden til din deps.edn:
{:deps {org.clojure/clojure {:mvn/version "1.11.1"}
migratus/migratus {:mvn/version "1.0.10"}
org.postgresql/postgresql {:mvn/version "42.6.0"}}}Opret derefter en fil med navnet migratus-config.edn (eller et tilsvarende navn) for at definere din databaseforbindelse:
{:store :database
:migration-dir "resources/migrations"
:db {:classname "org.postgresql.Driver"
:subprotocol "postgresql"
:subname "//localhost:5432/myapp_db"
:user "dbuser"
:password "dbpass"}}Strukturen af en migrering
Migreringer er normalt SQL-filer, der placeres i en bestemt mappe (for eksempel resources/migrations, som konfigureret tidligere). Hver migrering består af et "up"- og et "down"-script.
Migratus forventer filer med navne som YYYYMMDDHHMMSS-migration-name.up.sql og YYYYMMDDHHMMSS-migration-name.down.sql.
Tidsstemplet sikrer en entydig rækkefølge. Du kan generere disse med et kommandolinjeværktøj, typisk migratus create <name>.
Eksempel på `up.sql`
Filen .up.sql indeholder SQL-kommandoer, der anvender skemaændringen. Dette eksempel opretter en ny tabel med navnet users.
-- resources/migrations/20231027100000-create-users-table.up.sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP
);Dette script definerer den oprindelige struktur for vores brugere.
Eksempel på `down.sql`
Filen .down.sql indeholder SQL-kommandoer, der ruller skemaændringen fra den tilsvarende .up.sql-fil tilbage. Dette eksempel sletter tabellen users.
-- resources/migrations/20231027100000-create-users-table.down.sql
DROP TABLE IF EXISTS users;Det er afgørende, at `down`-scriptet præcist ophæver ændringerne fra `up`-scriptet, så du kan foretage sikre tilbagerulninger.
Anvendelse af migreringer
Når dine migreringsfiler er klar, og `migratus` er konfigureret, kan du anvende dine migreringer.
Typisk bruger du et kommandolinjeværktøj som Leiningen eller clj med et alias, der er konfigureret til `migratus`.
Sådan anvender du alle ventende migreringer:
lein migratus migrateeller, hvis du bruger clj med et migratus-alias:
clj -M:migratus migrateMigratus kører alle `up`-scripts, der endnu ikke er anvendt, i rækkefølge.
Ophævelse af ændringer
Nogle gange har du brug for at ophæve en migrering, måske på grund af en fejl eller ændrede krav. Migratus gør det nemt.
Sådan ruller du den senest anvendte migrering tilbage:
lein migratus rollbackDenne kommando kører `down`-scriptet for den senest anvendte migrering. Du kan kalde den flere gange for at rulle længere tilbage.
Sørg altid for, at dine `down`-scripts er sikre og idempotente!
Migreringsbegreber
Det er afgørende for effektiv skemahåndtering at forstå formålet med up- og down-scripts.
Opsummering: Skemahåndtering
Vi har undersøgt databasemigreringers afgørende rolle i håndteringen af skemaændringer i Clojure-projekter. Du har lært:
- Hvad databaseskemaer og migreringer er.
- Fordelene ved versionsstyrede skemaændringer.
- Hvordan du bruger `Migratus` til at definere og anvende migreringer med SQL-scripts af typen `up` og `down`.
- Kommandoer til at anvende og rulle migreringer tilbage.
Med migreringer kan dit databaseskema udvikle sig sammen med din programkode på en kontrolleret og pålidelig måde!
Lær Clojure med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Databasemigreringer og skemahåndtering” gratis?
Ja — hele teksten til “Databasemigreringer og skemahåndtering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Funktionel programmering i Clojure og backendudvikling på JVM-kurset, skal du opgradere til CoddyKit PRO. Funktionel programmering i Clojure og backendudvikling på JVM-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Databasemigreringer og skemahåndtering”?
Forstå værktøjer og strategier til håndtering af ændringer i databaseskemaer og migreringer i Clojure-projekter. Du øver dig i Funktionel programmering i Clojure og backendudvikling på JVM med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Funktionel programmering i Clojure og backendudvikling på JVM?
Der kræves ingen tidligere erfaring. Funktionel programmering i Clojure og backendudvikling på JVM på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Databasemigreringer og skemahåndtering”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Funktionel programmering i Clojure og backendudvikling på JVM-lektion?
Ja. Alle Funktionel programmering i Clojure og backendudvikling på JVM-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Forbindelse til databaser med next.jdbc
- Udførelse af CRUD-operationer
- Databasemigreringer og skemahåndtering
- Forbindelsespooling og transaktioner