Prisma Migration Conflicts పరిష్కరించడానికి మార్గదర్శి

ప్రొడక్షన్ డేటాబేస్‌పై prisma migrate reset రన్ చేయకండి.

ఒకవేళ మైగ్రేషన్ మార్చబడింది (modified) అని లేదా మీరు స్కీమాను రీసెట్ చేయాలని సందేశం కనిపిస్తే, వెంటనే ఆపండి. రీసెట్ చేయడం వల్ల మీ డేటా మొత్తం తొలగించబడుతుంది. మీరు ఏమీ కోల్పోకుండానే ఈ కాన్ఫ్లిక్ట్‌లను మాన్యువల్‌గా పరిష్కరించవచ్చు.

సాధారణ 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]

ఎర్రర్: మైగ్రేషన్ అప్లై చేసిన తర్వాత మార్చబడింది (Checksum mismatch)

• మీ ప్రస్తుత మైగ్రేషన్ ఫైల్ యొక్క SHA-256 hashను లెక్కించండి. • _prisma_migrations టేబుల్‌లో checksumను అప్‌డేట్ చేయండి. • ముఖ్య గమనిక: ఆ మైగ్రేషన్ పేరుకు సంబంధించిన అన్ని రోస్ (rows)ను అప్‌డేట్ చేయండి. rolled_back_at ఆధారంగా ఫిల్టర్ చేయకండి.

ఎర్రర్: Shadow database కాలమ్ కనిపించడం లేదు (P3006)

• ఒక మైగ్రేషన్, తర్వాతి మైగ్రేషన్‌లో సృష్టించబడే కాలమ్‌ను రిఫరెన్స్ చేసినప్పుడు ఇది జరుగుతుంది. • Prisma మైగ్రేషన్‌లను టైమ్‌స్టాంప్ క్రమంలో మళ్ళీ రన్ చేస్తుంది. • పరిష్కారం: కాలమ్ మొదట సృష్టించబడే మైగ్రేషన్‌కు SQL కోడ్‌ను తరలించండి.

ఎర్రర్: RLS పాలసీ వల్ల DROP COLUMN బ్లాక్ చేయబడింది

• PostgreSQL Row Level Security పాలసీలను కాలమ్స్‌తో అనుసంధానిస్తుంది. • పరిష్కారం: కాలమ్స్‌ను డ్రాప్ చేసేటప్పుడు CASCADE ఉపయోగించండి. • ఉదాహరణ: ALTER TABLE "my_table" DROP COLUMN IF EXISTS "tenant_id" CASCADE;

సురక్షితమైన మైగ్రేషన్ల కోసం ఉత్తమ పద్ధతులు

  • మొదట డేటాబేస్‌ను క్వెరీ చేయండి. కాలమ్ లేదా ఇండెక్స్ ఉందో లేదో ఊహించకండి. మైగ్రేషన్ కోడ్ రాయడానికి ముందు మీ అసలు డేటాబేస్ స్కీమాను తనిఖీ చేయడానికి నేరుగా SQL క్వెరీలను ఉపయోగించండి.
  • IF EXISTS మరియు IF NOT EXISTS ఉపయోగించండి. ఇది మీ మైగ్రేషన్‌లను idempotent గా మారుస్తుంది. ఒక idempotent మైగ్రేషన్ ఎటువంటి ఎర్రర్‌లు లేకుండా ఎన్నిసార్లైనా రన్ కావచ్చు.
  • కన్స్ట్రైంట్స్ (constraints) కోసం DO బ్లాక్‌లను ఉపయోగించండి. Foreign Keyలను జోడించేటప్పుడు, ఆ కన్స్ట్రైంట్ పేరు ఇప్పటికే ఉందో లేదో తనిఖీ చేసేలా ఒక చెక్‌ను జోడించండి.
  • మీరు Row Level Security ఉపయోగిస్తుంటే, డ్రాప్ చేసేటప్పుడు ఎల్లప్పుడూ CASCADE ఉపయోగించండి.

సమ్మరీ టేబుల్

• 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