နားလည်ထားရမယ့် အချက်
Seed script က developer/test environment ကို repeatable ဖြစ်စေပြီး random IDs ကိုခန့်မှန်းမည့်အစား natural unique keys နှင့် `RETURNING`/CTE ကိုသုံးသင့်ပါတယ်။ `ON CONFLICT` upsert သုံးရာမှာ overwrite ခွင့်ရှိသော columns ကိုတိတိကျကျသတ်မှတ်ပါ။ Report query က zero-count groups မပျောက်အောင် LEFT JOIN ကိုသုံးရနိုင်ပါတယ်။
လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်
PostgreSQL course၊ lessons နှင့် demo learner များကို upsert လုပ်ပြီး completion percentage report ထုတ်မယ်။ Percentage တွက်ရာမှာ integer division နဲ့ divide-by-zero ကို `100.0` နှင့် `NULLIF` ဖြင့်ကိုင်တွယ်ပါ။
အတူတူ စမ်းရေးကြည့်မယ်
INSERT INTO app.tutorials (title, slug, is_published, published_at)
VALUES ('PostgreSQL', 'postgresql', true, now())
ON CONFLICT (slug) DO UPDATE
SET title = EXCLUDED.title
RETURNING tutorial_id;
SELECT e.enrollment_id, u.display_name, t.title,
round(100.0 * count(*) FILTER (WHERE p.completed)
/ NULLIF(count(p.lesson_id), 0), 1) AS completion_percent
FROM app.enrollments e
JOIN app.users u USING (user_id)
JOIN app.tutorials t USING (tutorial_id)
LEFT JOIN app.lesson_progress p USING (enrollment_id, tutorial_id)
GROUP BY e.enrollment_id, u.display_name, t.title;ပြန်run လို့ရသော seed နှင့် learner completion report ရမည်။၅ မိနစ် စမ်းကြည့်
Lesson မစသေး၊ အလယ်ရောက်နှင့်ပြီးဆုံး learner သုံးမျိုး seed လုပ်ပြီး report output ကိုစစ်ပါ။
သတိလေးတစ်ချက်
Seed upsert က production user-edited fields ကို overwrite မလုပ်စေရန် environment နဲ့ column ownership ကိုရှင်းပါ။
PostgreSQL — INSERT — PostgreSQL Global Development Group