Popolare il database con dati di test
Generi dati di test realistici con INSERT ... SELECT e generate_series e verifichi il risultato con semplici query analitiche
Popolare il database con dati di test è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.
Perché usare i seed?
I database vuoti nascondono i bug. Servono dati realistici:
- Per eseguire test UI/E2E
- Per verificare le caratteristiche delle prestazioni (indici, piani delle query)
- Per mostrare l'applicazione in una demo
Seed scritti a mano
Per una manciata di righe di «fixture», le scriva manualmente in SQL o in una migrazione:
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));Serie generate per caricamenti massivi
generate_series è un valido alleato. Crei 1000 post:
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;Chiavi esterne casuali
Scelga una riga padre casuale:
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.Più veloce: precaricare i record padre
Materializzi una volta gli ID candidati:
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 e strumenti
Per dati fittizi più ricchi (nomi, indirizzi, paragrafi), usi:
faker_fdw— estensione di Postgres che espone Python Faker@faker-js/fakerdi Node- I seeder di Django/Rails sotto forma di script
COPY per grandi importazioni massive
Per caricare un milione di righe, COPY è da 5–10x più veloce di INSERT:
COPY users (email, full_name)
FROM '/tmp/seed_users.csv' WITH (FORMAT csv, HEADER true);Reimpostare le sequenze
Se ha inserito manualmente righe con ID espliciti, faccia avanzare rapidamente la sequenza affinché i futuri ID automatici non entrino in conflitto:
SELECT setval('users_id_seq', (SELECT COALESCE(MAX(id), 0) FROM users));Seed idempotenti
Renda i seed eseguibili in sicurezza più volte. Usi UPSERT o 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;Distribuzione realistica
I test dovrebbero rispecchiare la forma dei dati in produzione. Se l'80% dei post ha 0 commenti e l'1% ne ha 1000, anche i dati di test dovrebbero avere questa distribuzione; altrimenti i piani degli indici saranno fuorvianti.
Seeding in CI
Per i test end-to-end, esegua lo script di seeding dopo le migrazioni e prima della suite di test. Mantenga i seed sotto controllo versione.
Riepilogo
Buoni seed = dati realistici + script idempotente + caricamento rapido (COPY per i dati voluminosi).
- generate_series per i caricamenti massivi
- UPSERT per le esecuzioni ripetute
- setval dopo gli inserimenti manuali
- Distribuzioni coerenti con la produzione
Verifica rapida
Vuole inserire rapidamente 10.000 righe di dati di test. Quale funzione di PostgreSQL genera i numeri delle righe?
Domande Frequenti
La lezione «Popolare il database con dati di test» è gratuita?
Sì — il testo completo di «Popolare il database con dati di test» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.
Cosa imparerò in «Popolare il database con dati di test»?
Generi dati di test realistici con INSERT ... SELECT e generate_series e verifichi il risultato con semplici query analitiche Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Academy?
Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Popolare il database con dati di test»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Academy?
Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Modellare un blog: utenti, post e commenti
- Scegliere chiavi e tipi
- Indici per le query più comuni
- Popolare il database con dati di test