Prisma 8 rc.8 หยุดไม่ให้ migration plan สร้างแผนผิดแบบเงียบๆ พร้อมอัปเดต engine peer เป็น 0.3.0
Prisma ORM v8.0.0-rc.8 ไม่ปล่อยให้ migration plan สร้างแผนผิดจากฐานข้อมูลว่างแบบเงียบๆ ส่วน engine peer อัปเดตเป็น 0.3.0 ที่บางโปรเจกต์ต้องปรับตามเอง

Prisma ORM เครื่องมือจัดการฐานข้อมูล ปล่อยเวอร์ชัน v8.0.0-rc.8 ออกมาแล้ว ซึ่งยังเป็นรุ่นทดสอบก่อนเปิดตัวจริง โดยสิ่งที่ปรับแก้รอบนี้คือปรับไม่ให้คำสั่ง migration plan สำหรับวางแผนโครงสร้างฐานข้อมูล สร้างแผนที่ผิดพลาดแบบเงียบๆ อีกต่อไป
ลองนึกภาพว่าโปรเจกต์ของเรามีไฟล์ migration ที่บันทึกประวัติโครงสร้างฐานข้อมูลอยู่แล้ว แต่วันหนึ่งเราสั่ง migration plan ในช่วงที่ฐานข้อมูลปลายทางยังว่างเปล่า ในเวอร์ชันก่อนหน้านี้ Prisma จะไม่แจ้งเตือนอะไรเลย และสร้างแผนสร้างตารางใหม่ทั้งหมดตั้งแต่ต้นออกมาให้ ซึ่งดูเผินๆ เหมือนจะถูกต้อง แต่เมื่อนำไปรันกับฐานข้อมูลจริงที่มีตารางอยู่แล้ว ระบบจะพังทันที ใน rc.8 จึงแก้ปัญหานี้ โดยเปลี่ยนมาหยุดทำงานและแจ้งข้อผิดพลาดทันทีแทน
แผนสร้างตารางใหม่ทั้งหมด นำไปใช้กับฐานข้อมูลจริงไม่ได้

เงื่อนไขที่ทำให้เกิดปัญหานี้ประกอบด้วย 2 ส่วน คือ 1) ในโปรเจกต์มีไฟล์ migration อยู่แล้ว และ 2) ฐานข้อมูลที่เครื่องมือเชื่อมต่อไปอ่านนั้นว่างเปล่า
สาเหตุที่เกิดข้อผิดพลาดได้ง่าย เป็นเพราะข้อมูลทั้งสองฝั่งขัดแย้งกันเอง ฝั่งไฟล์ในโปรเจกต์บอกว่ามีประวัติโครงสร้างตารางอยู่แล้ว แต่ฝั่งฐานข้อมูลกลับยังไม่มีอะไรเลย ซึ่งของเดิม Prisma จะเลือกเชื่อฝั่งฐานข้อมูลแบบเงียบๆ แล้วสร้างแผนสร้างตารางใหม่ทั้งหมด ผลคือเมื่อนำไปใช้กับฐานข้อมูลจริงที่มีตารางพวกนั้นอยู่แล้ว ก็จะเกิดข้อผิดพลาดทันที
การแก้ไขใน rc.8 ได้ปรับให้ migration plan ปฏิเสธการสร้างแผนจากฐานข้อมูลที่ว่างเปล่า ถ้าตรวจพบว่าโปรเจกต์มีไฟล์ migration อยู่แล้ว โดยจะส่ง structured error ซึ่งเป็นข้อความแจ้งข้อผิดพลาดแบบมีโครงสร้างที่อ่านเข้าใจง่าย กลับมาอธิบายสถานการณ์แทนการสร้างแผนที่ใช้งานไม่ได้
สำหรับใครที่ตั้งใจจะวางแผน migration จาก baseline ที่กำหนดเอง ก็ยังทำได้ตามปกติ เพียงแต่ต้องระบุคำสั่งให้ชัดเจน ไม่ใช่ปล่อยให้เครื่องมือตัดสินใจเองแบบเงียบๆ อีกต่อไป
prisma-8 skill ปรับวิธีสอน AI Agent ให้เข้าใจระบบ migration

คำถามคือ แล้วทำไมถึงมีเคสที่สร้างแผนแบบนั้นตั้งแต่แรก? ใน release notes ระบุไว้ตรงๆ ว่าเกิดจาก Coding Agent หรือ AI ช่วยเขียนโค้ด เข้าใจระบบ migration ผิดมาตั้งแต่ต้น
ทาง Prisma จึงอัปเดต prisma-8 skill ซึ่งเป็นชุดความรู้ที่ AI Agent จะอ่านก่อนเริ่มทำงานในโปรเจกต์ และจะติดตั้งให้อัตโนมัติเมื่อสั่ง prisma init เพื่อสอนวิธีคิดที่ถูกต้องให้ Agent
เดิมที AI มักมองว่า migration คือเส้นตรงที่ต้องรันต่อกันทีละขั้นตอนตั้งแต่ไฟล์แรกจนถึงไฟล์สุดท้าย อยากได้โครงสร้างปลายทางแบบไหน ก็สั่งรันใหม่ตั้งแต่ต้น ทำให้แผนที่ได้กลายเป็นการสร้างตารางใหม่ทั้งชุด ซึ่งนำไปใช้กับฐานข้อมูลจริงที่รันอยู่ก่อนแล้วไม่ได้
สิ่งที่ skill ใหม่สอน Agent คือแนวคิด plan-from-state ร่วมกับการกำหนด baseline ซึ่งหมายถึงการวางแผนจาก "สถานะปัจจุบัน" ของฐานข้อมูลเทียบกับ "สถานะที่ต้องการ" โดยมี baseline เป็นตัวบอกจุดเริ่มต้น แผนที่ได้จึงเป็นการอัปเดตเฉพาะส่วนที่เปลี่ยนแปลง ไม่ใช่การเริ่มนับหนึ่งใหม่ทุกครั้ง
ตัวอย่างเช่น ถ้าต้องการตาราง user กับ order หากคิดแบบเดิม Agent จะสั่งสร้างทั้งสองตารางใหม่ทั้งหมด แต่ถ้าคิดจากสถานะ Agent จะดูว่าในฐานข้อมูลจริงมีตารางอะไรอยู่แล้วบ้าง แล้วสั่งสร้างเฉพาะตารางที่ยังขาดอยู่เท่านั้น
การอัปเดตในรอบนี้จึงเป็นการแก้ปัญหา 2 ระดับควบคู่กัน คือชั้นบนสอน Agent ให้คิดถูกต้อง และชั้นล่างปรับตัวเครื่องมือให้ปฏิเสธคำสั่งทันทีถ้า Agent ยังทำผิด ซึ่งตรงกับแนวคิดในบทความ เกณฑ์ของ agent skill ที่ใช้ได้จริง ที่ระบุว่าเราไม่ควรฝากความถูกต้องไว้กับ skill เพียงอย่างเดียว แต่ตัวเครื่องมือเองก็ต้องมีระบบป้องกันข้อผิดพลาดที่ดีด้วย
engine อัปเดตเป็น @prisma/[email protected] ใครบ้างที่ต้องปรับแก้
อีกหนึ่งเรื่องสำคัญใน rc.8 คือ breaking change ที่อาจกระทบการทำงานเดิมของบางโปรเจกต์ ซึ่งเป็นคนละกลุ่มกับเรื่องข้างต้น
ชุดเครื่องมือของ Prisma รอบนี้มาพร้อมกับ @prisma/[email protected] ซึ่งอัปเกรดจาก 0.2.3 โดยที่ @prisma/orm-toolchain ระบุ engine ไว้เป็น peer dependency ซึ่งหมายถึงแพ็กเกจที่ต้องใช้ร่วมกัน แต่โปรเจกต์ต้องเป็นผู้ติดตั้งเองแบบเจาะจงเวอร์ชัน
ส่วนภายในตัว engine ได้ย้าย @prisma/management-api-sdk จากแพ็กเกจหลักที่ติดตั้งให้อัตโนมัติ ไปเป็น peer dependency ที่เวอร์ชัน ^1.55.0 ซึ่งสำหรับการใช้งานทั่วไป คำสั่ง prisma จะจัดการแพ็กเกจนี้ให้อยู่แล้ว
ผลกระทบและแนวทางแก้ไขมี 3 กรณีดังนี้:
| สถานการณ์ของโปรเจกต์ | สิ่งที่ต้องทำ |
|---|---|
ติดตั้งและใช้งานผ่านคำสั่ง prisma ตามปกติ | ไม่ต้องทำอะไร ระบบจะจัดการ engine ให้เหมือนเดิม |
| กำหนดหรือล็อคเวอร์ชันของ engine ไว้เองในโปรเจกต์ | อัปเดตเวอร์ชันไปที่ @prisma/[email protected] |
รัน engine แยกต่างหากโดยไม่ผ่านคำสั่ง prisma | ติดตั้ง @prisma/management-api-sdk@^1.55.0 เพิ่มเติมด้วยตัวเอง |
ถ้าโปรเจกต์ของคุณใช้งาน Prisma ตามปกติในกรณีแรก ก็ไม่ต้องกังวลกับการเปลี่ยนแปลงนี้ เพราะ breaking change รอบนี้มีผลเฉพาะกับผู้ใช้ที่จัดการ engine ด้วยตัวเองเท่านั้น
การปรับปรุงย่อยอีก 3 รายการในเวอร์ชันนี้
- แก้ไขลิงก์เอกสารในข้อความ Error: ค่า
docsUrlใน structured error เปลี่ยนไปชี้ที่docs.prisma.io/docs/orm/v8/...แทนพาธorm/next/...ของช่วงก่อนเข้าเวอร์ชัน rc จึงกดเปิดเอกสารที่ถูกต้องได้ทันที - Language Server รู้จักไฟล์ schema ที่กำหนด path แบบ Windows แล้ว: Language Server เป็นระบบที่ช่วยให้โปรแกรมแก้ไขโค้ดเข้าใจไฟล์ schema ตอนนี้ระบบจะแปลงที่อยู่ไฟล์แบบ Windows ให้เป็นรูปแบบเดียวกันก่อน จึงมองไฟล์ที่ระบุ path อย่าง
D:\project\next.prismaว่าเป็นส่วนหนึ่งของโปรเจกต์ - อัปเดตแท็ก
@devให้ตรงกับเวอร์ชันล่าสุดเสมอ: รอบนี้ปรับ dist-tag ซึ่งเป็นป้ายกำกับเวอร์ชันบน npm เพื่อให้ทุก release บนกิ่งmainมีบิลด์-dev.1ของเวอร์ชันใหม่ตามมาด้วย คนที่ติดตั้งผ่านแท็ก@devจึงได้ engine ที่ตรงกับ release ปัจจุบันเสมอ
rc.8 ยังไม่ใช่ตัวจริง แล้วควรอัปตอนนี้ไหม
การตัดสินใจอัปเกรดขึ้นอยู่กับความต้องการของแต่ละโปรเจกต์ โดยมีข้อดีและข้อควรพิจารณาดังนี้:
เนื่องจากเวอร์ชัน rc ยังเป็นรุ่นทดสอบก่อนเปิดตัวจริง ข้อดีของการอัปเกรดคือจะได้ระบบป้องกันข้อผิดพลาดของ migration plan ซึ่งมีประโยชน์มากถ้าโปรเจกต์ของคุณใช้ AI Agent ช่วยดูแล migration ส่วนข้อควรระวังคือ เวอร์ชันนี้ยังอาจเปลี่ยนแปลงได้อีก และมี breaking change เรื่อง engine ที่บางโปรเจกต์ต้องจัดการก่อน
ถ้าตัดสินใจจะอัปเกรด ทางทีมงาน Prisma ได้เตรียม คู่มือการอัปเกรดจาก rc.7 ไปยัง rc.8 ไว้ใน repo แล้ว แนะนำให้อ่านคู่มือนี้ก่อนเพื่อความถูกต้อง ส่วนใครที่กำลังจะเริ่มโปรเจกต์ใหม่และยังลังเล ก็อาจพิจารณาเครื่องมือทางเลือกอื่นในกลุ่มเดียวกัน เช่น Drizzle ORM ที่กำลังจะถึง 1.0
ในยุคที่เราให้ AI Agent เข้ามาช่วยเขียนและจัดการ migration มากขึ้น การมีเครื่องมือที่คอยตรวจสอบและปฏิเสธคำสั่งที่ผิดพลาดได้ตั้งแต่แรก ย่อมช่วยลดความเสี่ยงและป้องกันปัญหาในระบบจริงได้
ที่มา: บทความ Release v8.0.0-rc.8 · prisma/orm จาก Prisma
ชอบเรื่องแนวนี้ มีอีบุ๊คฟรีให้อ่านต่อ
ChatGPT Work ฉบับเข้าใจง่าย มอบงานให้ AI ทำจนจบ ตั้งแต่งานแรกจนถึงงานอัตโนมัติ พร้อม workflow ใช้ได้จริง 8 แบบ
กดสมัครแล้วเราจะส่งเทคนิค AI และของแจกใหม่ๆ ให้ทางอีเมล เลิกรับได้ตลอด
สร้าง AI Automation Pipeline ทุกแบบ ด้วย Agents และ Skills

ปูจากพื้นฐาน prompt, context และ cost ไปจนปั้น Skill สั่ง Agent กับ Sub-agent แล้วต่อทุกอย่างเป็น pipeline อัตโนมัติที่ออกแบบเองได้ ดูฟรี 7 บทก่อนตัดสินใจ


