Prisma Migration Conflicts सोडवण्याचे मार्गदर्शक

प्रोडक्शन डेटाबेसवर prisma migrate reset चालवू नका.

जर तुम्हाला एखादा मेसेज दिसत असेल की मायग्रेशनमध्ये बदल झाला आहे किंवा तुम्हाला स्कीमा रिसेट करण्याची गरज आहे, तर थांबून जा. रिसेट केल्यामुळे तुमचा सर्व डेटा डिलीट होईल. तुम्ही कोणताही डेटा गमावल्याशिवाय हे कॉन्फ्लिक्ट्स मॅन्युअली सुधारू शकता.

सामान्य Prisma एरर्स आणि त्या कशा सुधाराव्या

एरर: मायग्रेशन रन होत असताना अयशस्वी झाले (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]

एरर: मायग्रेशन लागू (apply) केल्यानंतर त्यात बदल झाला (Checksum mismatch) • तुमच्या सध्याच्या मायग्रेशन फाईलचा SHA-256 hash काढा. • _prisma_migrations टेबलमधील चेकसम (checksum) अपडेट करा. • महत्त्वाचे: त्या मायग्रेशन नावाच्या सर्व रो (rows) अपडेट करा. rolled_back_at नुसार फिल्टर करू नका.

एरर: Shadow database कॉलम गहाळ आहे (P3006) • जेव्हा एखादे मायग्रेशन अशा कॉलमचा संदर्भ देते जो नंतरच्या मायग्रेशनमध्ये तयार केला जातो, तेव्हा असे घडते. • Prisma मायग्रेशन्स टाइमस्टॅम्प (timestamp) क्रमाने पुन्हा चालवते. • उपाय: SQL कोड अशा मायग्रेशनमध्ये हलवा जिथे तो कॉलम पहिल्यांदा तयार केला जातो.

एरर: DROP COLUMN पॉलिसीमुळे (RLS policy) ब्लॉक झाले आहे • PostgreSQL Row Level Security पॉलिसीज कॉलमशी जोडते. • उपाय: कॉलम ड्रॉप करताना CASCADE वापरा. • उदाहरण: ALTER TABLE "my_table" DROP COLUMN IF EXISTS "tenant_id" CASCADE;

सुरक्षित मायग्रेशन्ससाठी सर्वोत्तम पद्धती (Best Practices)

  • प्रथम डेटाबेस क्वेरी करा. कॉलम किंवा इंडेक्स अस्तित्वात आहे की नाही याचा अंदाज लावू नका. मायग्रेशन कोड लिहिण्यापूर्वी तुमच्या प्रत्यक्ष डेटाबेस स्कीमाची तपासणी करण्यासाठी थेट SQL क्वेरी वापरा.
  • IF EXISTS आणि IF NOT EXISTS वापरा. यामुळे तुमचे मायग्रेशन्स idempotent होतात. एक idempotent मायग्रेशन त्रुटी न येता अनेक वेळा रन होऊ शकते.
  • कंस्ट्रेंट्ससाठी (constraints) DO ब्लॉक्स वापरा. Foreign Key जोडताना, त्या कंस्ट्रेंटचे नाव आधीच अस्तित्वात आहे का, हे तपासण्यासाठी चेक वापरा.
  • जर तुम्ही Row Level Security वापरत असाल, तर ड्रॉप करण्यासाठी नेहमी CASCADE वापरा.

सारांश तक्ता

P3018 (Failed mid-run): SQL सुधारा, त्यानंतर resolve --rolled-back आणि resolve --applied वापरा. • Checksum mismatch: नवीन hash काढा आणि _prisma_migrations मधील सर्व रो अपडेट करा. • Shadow DB error: तुमचा टाइमस्टॅम्प क्रम तपासा आणि SQL लॉजिक हलवा. • RLS error: तुमच्या DROP स्टेटमेंटमध्ये CASCADE जोडा.

स्रोत: https://dev.to/aswindanu_anwar_38c31d278/the-only-guide-you-need-for-prisma-migration-conflicts-without-losing-data-6bc