Prisma Migration Conflicts کو حل کرنے کے لیے رہنمائی

پروڈکشن ڈیٹا بیس پر prisma migrate reset نہ چلائیں۔

اگر آپ کو ایسا پیغام نظر آئے کہ کوئی مائیگریشن تبدیل کر دی گئی ہے یا آپ کو اسکیما ری سیٹ کرنے کی ضرورت ہے، تو رک جائیں۔ ری سیٹ کرنے سے آپ کا تمام ڈیٹا حذف ہو جائے گا۔ آپ بغیر کچھ کھوئے ان تنازعات (conflicts) کو دستی طور پر ٹھیک کر سکتے ہیں۔

عام Prisma Errors اور انہیں ٹھیک کرنے کا طریقہ

Error: Migration failed mid-run (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: Migration modified after it was applied (Checksum mismatch) • اپنی موجودہ مائیگریشن فائل کا SHA-256 hash معلوم کریں۔ • _prisma_migrations ٹیبل میں checksum کو اپ ڈیٹ کریں۔ • اہم: اس مائیگریشن کے نام کے لیے تمام روز (rows) کو اپ ڈیٹ کریں۔ rolled_back_at کے ذریعے فلٹر نہ کریں۔

Error: Shadow database column missing (P3006) • یہ تب ہوتا ہے جب کوئی مائیگریشن ایسے کالم کا حوالہ دیتی ہے جو بعد والی مائیگریشن میں تخلیق کیا گیا ہو۔ • Prisma مائیگریشن کو ٹائم اسٹیمپ (timestamp) کی ترتیب سے دوبارہ چلاتا ہے۔ • حل: SQL کوڈ کو اس مائیگریشن میں منتقل کریں جہاں کالم پہلی بار تخلیق کیا گیا ہو۔

Error: DROP COLUMN blocked by 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 استعمال کرتے ہیں تو حذف (drops) کرنے کے لیے ہمیشہ CASCADE کا استعمال کریں۔

خلاصہ ٹیبل (Summary Table)

• P3018 (درمیان میں ناکامی): 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