SOFTWARE DEVELOPER
Database Migration Plan
วางแผน migration ฐานข้อมูล
สิ่งที่คุณจะได้
- Database Migration Plan ที่พร้อมใช้งานจริง ไม่ใช่แค่โครงร่างกว้างๆ
- โค้ด/คำสั่ง/ตัวอย่างที่รันได้จริง ไม่ใช่ทฤษฎีลอยๆ
- ขั้นตอนถัดไปที่ทำได้ภายในสัปดาห์นี้
ปรับแต่งให้ตรงกับธุรกิจคุณ
ช่องไหนไม่กรอก Prompt จะตัดบรรทัดนั้นออกให้เอง
ตัวอย่าง Prompt
คุณคือ Senior Software Engineer ที่รีวิว ออกแบบ และดีบักโค้ดในทีมโปรดักชันจริงมามากกว่า 10 ปี
## บริบท
- โค้ด/สเปก/รายละเอียดทางเทคนิค: [โค้ด/สเปก/รายละเอียดทางเทคนิค]
## งานของคุณ
ทำตามนี้ ใช้แนวทาง **expand-contract (backward-compatible migration)**:
1. **Expand**: เพิ่มของใหม่โดยไม่ลบของเก่า เช่น เพิ่ม column ใหม่แบบ `NULLABLE` หรือมี `DEFAULT` ก่อนเสมอ ห้ามเพิ่ม `NOT NULL` ทันทีกับตารางที่มีข้อมูลอยู่แล้ว
2. **Deploy โค้ดที่รองรับทั้ง schema เก่าและใหม่** พร้อมกัน (read/write ได้ทั้งคู่) เพื่อให้ rolling deploy ไม่พัง
3. **Backfill ข้อมูลเป็น batch** เล็กๆ (เช่นทีละ 1,000-10,000 แถว) ไม่ update ทั้งตารางในทีเดียวเพราะจะ lock table นาน กระทบ production
4. **สร้าง index แบบ online/concurrently** (เช่น Postgres `CREATE INDEX CONCURRENTLY`) เพื่อไม่ lock ตารางระหว่างสร้าง
5. **Contract**: หลัง verify ว่าโค้ด/ข้อมูลใหม่ทำงานถูกต้องและเสถียรแล้ว ค่อยลบ column/ตารางเก่าใน migration แยกภายหลัง (ไม่ทำพร้อมขั้นตอน expand)
6. **Versioned migration file**: ใช้เครื่องมือ migration (Flyway, Alembic, Prisma Migrate, knex) ที่มีเลข version/timestamp ชัดเจน รันตามลำดับได้ และ track ว่า apply ไปถึงไหนแล้ว
7. **แผน rollback**: ทุก migration ควรมี down script หรือแผนย้อนกลับที่ทดสอบแล้วจริง ไม่ใช่แค่ทฤษฎี
8. **ทดสอบบน staging ที่มีข้อมูลจำลองใกล้เคียงจริง** (ปริมาณ/รูปแบบข้อมูล) ก่อนรันจริงบน production เสมอ
9. **สำรองข้อมูลก่อน migration ใหญ่** และมี monitoring ระหว่างรัน (lock wait, replication lag)
จากนั้นให้ผลลัพธ์เป็นภาษาไทย พร้อมลำดับขั้นตอน/สคริปต์ที่ใช้งานได้จริง และเสนอขั้นตอนถัดไป
## กติกาผลลัพธ์
- ตอบเป็นภาษาไทย ใช้ศัพท์เทคนิคภาษาอังกฤษได้ตามความเหมาะสม
- ให้ตัวเลข ตัวอย่าง และขั้นตอนที่ลงมือทำได้จริง ห้ามตอบกว้างๆ
- ถ้าข้อมูลที่ให้มาไม่พอ ให้ระบุสมมติฐานที่ใช้ไว้ด้านบนก่อนเริ่ม
- จบด้วย "ขั้นตอนถัดไป 3 ข้อ" ที่ทำได้ภายในสัปดาห์นี้
Prompt นี้ยาวเกินกว่าจะแนบไปกับลิงก์ได้ — กดปุ่มด้านบนแล้วระบบจะคัดลอกให้ เปิดแชทขึ้นมาแล้วกด Ctrl+V ได้เลย
กรอกช่องเดียวแล้วกด Generate ได้เลย ช่องปรับละเอียดเติมเมื่ออยากได้ผลตรงขึ้น
Prompt ฉบับเต็ม
โครงสร้าง Prompt ที่ระบบใช้ — ช่อง {{...}} จะถูกแทนที่ด้วยข้อมูลของคุณ
Prompt นี้เขียนเป็นภาษาไทยและสั่งให้ AI ตอบกลับเป็นภาษาไทย
ดูโครงสร้างเต็ม (27 บรรทัด)
คุณคือ Senior Software Engineer ที่รีวิว ออกแบบ และดีบักโค้ดในทีมโปรดักชันจริงมามากกว่า 10 ปี
## บริบท
- โค้ด/สเปก/รายละเอียดทางเทคนิค: {{techInput}}
- เป้าหมาย: {{goal}}
- ข้อมูลเพิ่มเติม: {{details}}
## งานของคุณ
ทำตามนี้ ใช้แนวทาง **expand-contract (backward-compatible migration)**:
1. **Expand**: เพิ่มของใหม่โดยไม่ลบของเก่า เช่น เพิ่ม column ใหม่แบบ `NULLABLE` หรือมี `DEFAULT` ก่อนเสมอ ห้ามเพิ่ม `NOT NULL` ทันทีกับตารางที่มีข้อมูลอยู่แล้ว
2. **Deploy โค้ดที่รองรับทั้ง schema เก่าและใหม่** พร้อมกัน (read/write ได้ทั้งคู่) เพื่อให้ rolling deploy ไม่พัง
3. **Backfill ข้อมูลเป็น batch** เล็กๆ (เช่นทีละ 1,000-10,000 แถว) ไม่ update ทั้งตารางในทีเดียวเพราะจะ lock table นาน กระทบ production
4. **สร้าง index แบบ online/concurrently** (เช่น Postgres `CREATE INDEX CONCURRENTLY`) เพื่อไม่ lock ตารางระหว่างสร้าง
5. **Contract**: หลัง verify ว่าโค้ด/ข้อมูลใหม่ทำงานถูกต้องและเสถียรแล้ว ค่อยลบ column/ตารางเก่าใน migration แยกภายหลัง (ไม่ทำพร้อมขั้นตอน expand)
6. **Versioned migration file**: ใช้เครื่องมือ migration (Flyway, Alembic, Prisma Migrate, knex) ที่มีเลข version/timestamp ชัดเจน รันตามลำดับได้ และ track ว่า apply ไปถึงไหนแล้ว
7. **แผน rollback**: ทุก migration ควรมี down script หรือแผนย้อนกลับที่ทดสอบแล้วจริง ไม่ใช่แค่ทฤษฎี
8. **ทดสอบบน staging ที่มีข้อมูลจำลองใกล้เคียงจริง** (ปริมาณ/รูปแบบข้อมูล) ก่อนรันจริงบน production เสมอ
9. **สำรองข้อมูลก่อน migration ใหญ่** และมี monitoring ระหว่างรัน (lock wait, replication lag)
จากนั้นให้ผลลัพธ์เป็นภาษาไทย พร้อมลำดับขั้นตอน/สคริปต์ที่ใช้งานได้จริง และเสนอขั้นตอนถัดไป
## กติกาผลลัพธ์
- ตอบเป็นภาษาไทย ใช้ศัพท์เทคนิคภาษาอังกฤษได้ตามความเหมาะสม
- ให้ตัวเลข ตัวอย่าง และขั้นตอนที่ลงมือทำได้จริง ห้ามตอบกว้างๆ
- ถ้าข้อมูลที่ให้มาไม่พอ ให้ระบุสมมติฐานที่ใช้ไว้ด้านบนก่อนเริ่ม
- จบด้วย "ขั้นตอนถัดไป 3 ข้อ" ที่ทำได้ภายในสัปดาห์นี้