SQL Academy · Lektion

Udfyld databasen med testdata

Generér realistiske testdata med INSERT ... SELECT og generate_series, og kontrollér dem med enkle analytiske forespørgsler.

Lektion 4 af 413 trin

Udfyld databasen med testdata er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 4 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 SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvorfor indlæse testdata?

Tomme databaser skjuler fejl. Du har brug for realistiske data:

  • Til at køre UI-/E2E-tests
  • Til at kontrollere ydeevneegenskaber (indekser, forespørgselsplaner)
  • Til at demonstrere appen

Håndskrevne datasæt

Til en håndfuld "fixture"-rækker kan du skrive dem manuelt i SQL eller en migration:

INSERT INTO users (id, email, full_name) VALUES
  (1, 'alice@example.com', 'Alice Adams'),
  (2, 'bob@example.com',   'Bob Brown');

SELECT setval('users_id_seq', (SELECT MAX(id) FROM users));

Genererede serier til masseindlæsning

generate_series er din ven. Opret 1000 indlæg:

INSERT INTO posts (author_id, title, body, published_at)
SELECT
  ((random() * 9 + 1)::int),                              -- random user 1-10
  'Post number ' || g,
  'Lorem ipsum body ' || g,
  NOW() - (random() * INTERVAL '90 days')
FROM generate_series(1, 1000) AS g;

Tilfældige fremmednøgler

Vælg en tilfældig række fra den overordnede tabel:

INSERT INTO comments (post_id, author_id, body)
SELECT
  (SELECT id FROM posts ORDER BY random() LIMIT 1),
  (SELECT id FROM users ORDER BY random() LIMIT 1),
  'Sample comment ' || g
FROM generate_series(1, 5000) AS g;
-- Slow at scale — see next slide for a faster pattern.

Hurtigere: Forudindlæs de overordnede rækker

Materialisér kandidat-ID'er én gang:

WITH u AS (SELECT id FROM users),
     p AS (SELECT id FROM posts)
INSERT INTO comments (post_id, author_id, body)
SELECT
  (SELECT id FROM p OFFSET floor(random()*1000)::int LIMIT 1),
  (SELECT id FROM u OFFSET floor(random()*10)::int   LIMIT 1),
  'Sample comment ' || g
FROM generate_series(1, 5000) AS g;

faker_fdw og værktøjer

Til mere omfattende falske data (navne, adresser, afsnit) kan du bruge:

  • faker_fdw — Postgres-udvidelse, der eksponerer Python Faker
  • @faker-js/faker i Node
  • Django-/Rails-seedere i scriptform

COPY til store masseimporter

Hvis du vil indlæse en million rækker, er COPY 5–10 gange hurtigere end INSERT:

COPY users (email, full_name)
  FROM '/tmp/seed_users.csv' WITH (FORMAT csv, HEADER true);

Nulstilling af sekvenser

Hvis du manuelt har indsat rækker med eksplicitte ID'er, skal du føre sekvensen frem, så fremtidige automatiske ID'er ikke kolliderer:

SELECT setval('users_id_seq', (SELECT COALESCE(MAX(id), 0) FROM users));

Idempotente datasæt

Gør datasættene sikre at køre mange gange. Brug UPSERT eller TRUNCATE-then-INSERT:

INSERT INTO products (sku, name, price) VALUES
  ('A-001', 'Widget', 9.99)
ON CONFLICT (sku) DO UPDATE
  SET name = EXCLUDED.name, price = EXCLUDED.price;

Realistisk fordeling

Tests bør afspejle produktionsdataenes form. Hvis 80 % af indlæggene har 0 kommentarer, og 1 % har 1000, bør testdataene se sådan ud, ellers vil dine indeksplaner være misvisende.

Indlæsning af testdata i CI

Til end-to-end-tests skal du køre scriptet til indlæsning af testdata efter migrationerne og før testsuiten. Opbevar testdataene i versionskontrol.

Opsummering

Gode datasæt = realistiske data + idempotent script + hurtig indlæsning (COPY til store datamængder).

  • generate_series til masseindlæsning
  • UPSERT til gentagne kørsler
  • setval efter manuelle indsættelser
  • Match produktionsfordelingerne

Hurtigt tjek

Du vil hurtigt indsætte 10.000 rækker med testdata. Hvilken PostgreSQL-funktion genererer rækkenumrene?

Gratis at komme i gang

Lær SQL 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
46
Lektioner
183

Ofte stillede spørgsmål

Er lektionen “Udfyld databasen med testdata” gratis?

Ja — hele teksten til “Udfyld databasen med testdata” 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 SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Udfyld databasen med testdata”?

Generér realistiske testdata med INSERT ... SELECT og generate_series, og kontrollér dem med enkle analytiske forespørgsler. Du øver dig i SQL Academy 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å SQL Academy?

Der kræves ingen tidligere erfaring. SQL Academy 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 4 af 4.

Hvor lang tid tager lektionen “Udfyld databasen med testdata”?

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 SQL Academy-lektion?

Ja. Alle SQL Academy-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

  1. Modellering af en blog: brugere, indlæg, kommentarer
  2. Valg af nøgler og typer
  3. Indekser til typiske forespørgsler
  4. Udfyld databasen med testdata
← Tilbage til SQL Academy