Initialiser la base de données avec des données de test
Générez des données de test réalistes avec INSERT ... SELECT et generate_series, puis vérifiez-les avec de simples requêtes analytiques.
Initialiser la base de données avec des données de test est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Pourquoi initialiser les données ?
Les bases de données vides dissimulent les erreurs. Vous avez besoin de données réalistes :
- Pour exécuter les tests d’interface et de bout en bout
- Pour vérifier les caractéristiques de performance (index, plans d’exécution)
- Pour présenter l’application
Données d’initialisation écrites à la main
Pour quelques lignes de données de référence, écrivez-les directement en SQL ou dans une 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));Séries générées pour les insertions en masse
generate_series est votre allié. Créez 1 000 articles :
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;Clés étrangères aléatoires
Choisissez une ligne parente au hasard :
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.Plus rapide : mettez les parents en cache à l’avance
Matérialisez une seule fois les identifiants candidats :
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 et outils
Pour obtenir des données fictives plus riches (noms, adresses, paragraphes), utilisez :
faker_fdw— extension de PostgreSQL exposant Faker de Python@faker-js/fakerde Node- Les outils de génération de données de Django/Rails sous forme de scripts
COPY pour les importations volumineuses
Pour charger un million de lignes, COPY est 5 à 10 fois plus rapide qu’INSERT :
COPY users (email, full_name)
FROM '/tmp/seed_users.csv' WITH (FORMAT csv, HEADER true);Réinitialiser les séquences
Si vous avez inséré manuellement des lignes avec des identifiants explicites, avancez rapidement la séquence afin que les futurs identifiants automatiques n’entrent pas en collision :
SELECT setval('users_id_seq', (SELECT COALESCE(MAX(id), 0) FROM users));Initialisations idempotentes
Faites en sorte que les scripts d’initialisation puissent être exécutés plusieurs fois sans risque. Utilisez UPSERT ou TRUNCATE suivi d’un 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;Répartition réaliste
Les tests doivent refléter la structure de la production. Si 80 % des articles n’ont aucun commentaire et que 1 % en ont 1 000, les données de test doivent respecter cette répartition, sinon vos plans d’index seront trompeurs.
Initialisation dans l’intégration continue
Pour les tests de bout en bout, exécutez le script d’initialisation après les migrations et avant la suite de tests. Conservez les scripts d’initialisation dans le contrôle de version.
Récapitulatif
Une bonne initialisation = données réalistes + script idempotent + chargement rapide (COPY pour les gros volumes).
- generate_series pour les insertions en masse
- UPSERT pour les exécutions répétées
- Réinitialisation de la séquence après les insertions manuelles
- Respect des répartitions de la production
Vérification rapide
Vous voulez insérer rapidement 10 000 lignes de données de test. Quelle fonction PostgreSQL génère les numéros de ligne ?
Questions Fréquemment Posées
La leçon « Initialiser la base de données avec des données de test » est-elle gratuite ?
Oui — le texte complet de « Initialiser la base de données avec des données de test » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Initialiser la base de données avec des données de test » ?
Générez des données de test réalistes avec INSERT ... SELECT et generate_series, puis vérifiez-les avec de simples requêtes analytiques. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Initialiser la base de données avec des données de test » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Modéliser un blog : utilisateurs, publications, commentaires
- Choisir les clés et les types
- Index pour les requêtes courantes
- Initialiser la base de données avec des données de test