Die Datenbank mit Testdaten befüllen
Erzeugen Sie realistische Testdaten mit INSERT ... SELECT und generate_series und überprüfen Sie sie mit einfachen Analyseabfragen.
Die Datenbank mit Testdaten befüllen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Seed-Daten?
Leere Datenbanken verbergen Fehler. Sie benötigen realistische Daten:
- zum Ausführen von UI-/E2E-Tests
- zum Überprüfen von Performance-Eigenschaften (Indizes, Abfragepläne)
- zum Vorführen der Anwendung
Von Hand geschriebene Seed-Daten
Für eine Handvoll „Fixture“-Zeilen schreiben Sie diese von Hand in SQL oder in einer 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));Generierte Sequenzen für große Mengen
generate_series ist Ihr Freund. Erstellen Sie 1000 Beiträge:
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;Zufällige Fremdschlüssel
Wählen Sie eine zufällige übergeordnete Zeile:
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.Schneller: übergeordnete Datensätze vorab zwischenspeichern
Materialisieren Sie die möglichen IDs einmal:
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 und Tools
Für umfangreichere Fake-Daten (Namen, Adressen, Absätze) verwenden Sie:
faker_fdw– eine PostgreSQL-Erweiterung, die Python Faker bereitstellt- Node's
@faker-js/faker - Django-/Rails-Seeder in Skriptform
COPY für große Massenimporte
Um eine Million Zeilen zu laden, ist COPY 5- bis 10-mal schneller als INSERT:
COPY users (email, full_name)
FROM '/tmp/seed_users.csv' WITH (FORMAT csv, HEADER true);Sequenzen zurücksetzen
Wenn Sie Zeilen mit expliziten IDs manuell eingefügt haben, setzen Sie die Sequenz vor, damit zukünftige automatischen IDs nicht kollidieren:
SELECT setval('users_id_seq', (SELECT COALESCE(MAX(id), 0) FROM users));Idempotente Seed-Daten
Machen Sie Seed-Skripte sicher mehrfach ausführbar. Verwenden Sie UPSERT oder 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;Realistische Verteilung
Tests sollten die Struktur der Produktion widerspiegeln. Wenn 80 % der Beiträge 0 Kommentare und 1 % 1000 Kommentare haben, sollten die Testdaten genauso aussehen, sonst führen Ihre Indexpläne in die Irre.
Seed-Daten in CI
Führen Sie für End-to-End-Tests das Seed-Skript nach den Migrationen und vor der Testsuite aus. Halten Sie die Seed-Daten in der Versionsverwaltung.
Zusammenfassung
Gute Seed-Daten = realistische Daten + idempotentes Skript + schnelles Laden (COPY für große Datenmengen).
- generate_series für große Mengen
- UPSERT für wiederholte Ausführungen
- setval nach manuellen Einfügungen
- Produktionsverteilungen nachbilden
Kurzer Test
Sie möchten schnell 10.000 Zeilen mit Testdaten einfügen. Welche PostgreSQL-Funktion erzeugt die Zeilennummern?
Häufig gestellte Fragen
Ist die Lektion „Die Datenbank mit Testdaten befüllen“ kostenlos?
Ja — der vollständige Text von „Die Datenbank mit Testdaten befüllen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Die Datenbank mit Testdaten befüllen“?
Erzeugen Sie realistische Testdaten mit INSERT ... SELECT und generate_series und überprüfen Sie sie mit einfachen Analyseabfragen. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Die Datenbank mit Testdaten befüllen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Ein Blog-Datenmodell: Benutzer, Beiträge, Kommentare
- Schlüssel und Datentypen auswählen
- Indizes für häufige Abfragen
- Die Datenbank mit Testdaten befüllen