Prisma Migration Conflicts को हल करने के लिए गाइड
प्रोडक्शन डेटाबेस पर prisma migrate reset न चलाएं।
यदि आपको ऐसा संदेश दिखाई दे कि कोई माइग्रेशन संशोधित (modified) किया गया है या आपको स्कीमा को रीसेट करने की आवश्यकता है, तो रुक जाएं। रीसेट करने से आपका सारा डेटा डिलीट हो जाएगा। आप बिना कुछ खोए इन संघर्षों (conflicts) को मैन्युअल रूप से ठीक कर सकते हैं।
सामान्य Prisma Errors और उन्हें ठीक करने के तरीके
Error: माइग्रेशन बीच में ही विफल हो गया (P3018)
• SQL फ़ाइल को ठीक करें।
• चलाएं: npx prisma migrate resolve --rolled-back [migration_name]
• चलाएं: npx prisma db execute --file [path_to_sql_file]
• चलाएं: npx prisma migrate resolve --applied [migration_name]
Error: माइग्रेशन लागू होने के बाद संशोधित किया गया (Checksum mismatch)
• अपनी वर्तमान माइग्रेशन फ़ाइल का SHA-256 hash निकालें।
• _prisma_migrations टेबल में checksum अपडेट करें।
• महत्वपूर्ण: उस माइग्रेशन नाम की सभी rows को अपडेट करें। rolled_back_at के आधार पर फ़िल्टर न करें।
Error: Shadow database कॉलम गायब है (P3006) • ऐसा तब होता है जब कोई माइग्रेशन ऐसे कॉलम को रेफर करता है जिसे बाद वाला माइग्रेशन बनाता है। • Prisma माइग्रेशन को timestamp के क्रम में फिर से चलाता है। • समाधान: SQL कोड को उस माइग्रेशन में ले जाएं जहाँ कॉलम पहली बार बनाया गया है।
Error: DROP COLUMN को RLS policy द्वारा रोका गया है
• PostgreSQL Row Level Security नीतियों (policies) को कॉलम से जोड़ती है।
• समाधान: कॉलम को ड्रॉप करते समय CASCADE का उपयोग करें।
• उदाहरण: ALTER TABLE "my_table" DROP COLUMN IF EXISTS "tenant_id" CASCADE;
सुरक्षित माइग्रेशन के लिए सर्वोत्तम अभ्यास (Best Practices)
- पहले डेटाबेस को क्वेरी करें। यह अनुमान न लगाएं कि कोई कॉलम या इंडेक्स मौजूद है या नहीं। माइग्रेशन कोड लिखने से पहले अपने वास्तविक डेटाबेस स्कीमा की जांच करने के लिए सीधे SQL क्वेरी का उपयोग करें।
IF EXISTSऔरIF NOT EXISTSका उपयोग करें। यह आपके माइग्रेशन को idempotent बनाता है। एक idempotent माइग्रेशन बिना किसी त्रुटि के कई बार चलाया जा सकता है।- constraints के लिए
DOblocks का उपयोग करें। Foreign Key जोड़ने को एक चेक में लपेटें (wrap करें) ताकि यह देखा जा सके कि constraint का नाम पहले से मौजूद है या नहीं। - यदि आप Row Level Security का उपयोग करते हैं, तो ड्रॉप करने के लिए हमेशा
CASCADEका उपयोग करें।
सारांश तालिका (Summary Table)
• P3018 (बीच में विफल): SQL ठीक करें, फिर resolve --rolled-back और resolve --applied का उपयोग करें।
• Checksum mismatch: नया hash निकालें और _prisma_migrations में सभी rows को अपडेट करें।
• Shadow DB error: अपने timestamp क्रम की जांच करें और SQL लॉजिक को स्थानांतरित करें।
• RLS error: अपने DROP स्टेटमेंट में CASCADE जोड़ें।
