การเติมข้อมูลทดสอบลงฐานข้อมูล
สร้างข้อมูลทดสอบที่สมจริงด้วย INSERT ... SELECT และ generate_series แล้วตรวจสอบด้วยคำค้นวิเคราะห์อย่างง่าย
การเติมข้อมูลทดสอบลงฐานข้อมูล เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทำไมต้องเติมข้อมูลตั้งต้น
ฐานข้อมูลว่างอาจซ่อนข้อผิดพลาด คุณต้องการข้อมูลที่สมจริงเพื่อ:
- เรียกใช้การทดสอบ UI/E2E
- ตรวจสอบลักษณะด้านประสิทธิภาพ (ดัชนี แผนการสืบค้น)
- สาธิตแอป
ข้อมูลตั้งต้นที่เขียนด้วยตนเอง
สำหรับแถวข้อมูลตัวอย่างจำนวนไม่มาก ให้เขียนด้วยตนเองใน SQL หรือการย้ายข้อมูล:
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));ใช้ generate_series กับข้อมูลจำนวนมาก
generate_series เป็นเครื่องมือที่มีประโยชน์ ใช้สร้างโพสต์ 1,000 รายการ:
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;คีย์นอกแบบสุ่ม
เลือกแถวแม่แบบสุ่ม:
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.วิธีที่เร็วกว่า: เก็บแถวแม่ไว้ในแคชล่วงหน้า
สร้างรายการ ID ที่เป็นตัวเลือกไว้ครั้งเดียว:
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 และเครื่องมือ
สำหรับข้อมูลจำลองที่มีรายละเอียดมากขึ้น (ชื่อ ที่อยู่ ย่อหน้า) ให้ใช้:
faker_fdw— ส่วนขยาย Postgres ที่เปิดให้ใช้ Python Faker@faker-js/fakerของ Node- ตัวเติมข้อมูลตั้งต้นของ Django/Rails ในรูปสคริปต์
ใช้ COPY สำหรับการนำเข้าข้อมูลจำนวนมาก
หากต้องโหลดหนึ่งล้านแถว COPY จะเร็วกว่า INSERT 5–10 เท่า:
COPY users (email, full_name)
FROM '/tmp/seed_users.csv' WITH (FORMAT csv, HEADER true);การรีเซ็ตลำดับ
หากคุณแทรกแถวด้วย ID ที่ระบุเอง ให้เลื่อนลำดับไปข้างหน้าอย่างรวดเร็ว เพื่อไม่ให้ตัวระบุ ID อัตโนมัติในอนาคตชนกัน:
SELECT setval('users_id_seq', (SELECT COALESCE(MAX(id), 0) FROM users));ข้อมูลตั้งต้นที่ทำซ้ำได้อย่างปลอดภัย
ทำให้สามารถเรียกใช้ข้อมูลตั้งต้นซ้ำได้หลายครั้งอย่างปลอดภัย ใช้ UPSERT หรือ TRUNCATE แล้วจึง 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;การกระจายข้อมูลที่สมจริง
การทดสอบควรสะท้อนรูปแบบของระบบจริง หากโพสต์ 80% ไม่มีความคิดเห็น และ 1% มีความคิดเห็น 1,000 รายการ ข้อมูลทดสอบก็ควรมีลักษณะเช่นนั้น มิฉะนั้นแผนดัชนีของคุณจะทำให้เข้าใจผิด
การเติมข้อมูลตั้งต้นใน CI
สำหรับการทดสอบตั้งแต่ต้นจนจบ ให้เรียกใช้สคริปต์เติมข้อมูลตั้งต้นหลังการย้ายข้อมูลและก่อนชุดการทดสอบ เก็บข้อมูลตั้งต้นไว้ในการควบคุมเวอร์ชัน
สรุปทบทวน
ข้อมูลตั้งต้นที่ดี = ข้อมูลสมจริง + สคริปต์ที่ทำซ้ำได้อย่างปลอดภัย + โหลดได้รวดเร็ว (ใช้ COPY กับข้อมูลจำนวนมาก)
- ใช้ generate_series สำหรับข้อมูลจำนวนมาก
- ใช้ UPSERT เมื่อเรียกใช้ซ้ำ
- ใช้ setval หลังการแทรกด้วยตนเอง
- ให้การกระจายข้อมูลตรงกับระบบจริง
ตรวจสอบความเข้าใจ
คุณต้องการแทรกข้อมูลทดสอบ 10,000 แถวอย่างรวดเร็ว ฟังก์ชันใดของ PostgreSQL ที่สร้างหมายเลขแถว
เรียนรู้ SQL ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 46
- บทเรียน
- 183
คำถามที่พบบ่อย
บทเรียน “การเติมข้อมูลทดสอบลงฐานข้อมูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเติมข้อมูลทดสอบลงฐานข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเติมข้อมูลทดสอบลงฐานข้อมูล”
สร้างข้อมูลทดสอบที่สมจริงด้วย INSERT ... SELECT และ generate_series แล้วตรวจสอบด้วยคำค้นวิเคราะห์อย่างง่าย คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การเติมข้อมูลทดสอบลงฐานข้อมูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสร้างโมเดลบล็อก: ผู้ใช้ โพสต์ ความคิดเห็น
- การเลือกคีย์และชนิดข้อมูล
- ดัชนีสำหรับคำค้นที่พบบ่อย
- การเติมข้อมูลทดสอบลงฐานข้อมูล