SQL Academy · บทเรียน

การเติมข้อมูลทดสอบลงฐานข้อมูล

สร้างข้อมูลทดสอบที่สมจริงด้วย INSERT ... SELECT และ generate_series แล้วตรวจสอบด้วยคำค้นวิเคราะห์อย่างง่าย

บทเรียน 4 จาก 413 ขั้นตอน

การเติมข้อมูลทดสอบลงฐานข้อมูล เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างโมเดลบล็อก: ผู้ใช้ โพสต์ ความคิดเห็น
  2. การเลือกคีย์และชนิดข้อมูล
  3. ดัชนีสำหรับคำค้นที่พบบ่อย
  4. การเติมข้อมูลทดสอบลงฐานข้อมูล
← กลับไปที่ SQL Academy