Prisma Migration ಸಂಘರ್ಷಗಳನ್ನು ಪರಿಹರಿಸುವ ಮಾರ್ಗದರ್ಶಿ
ಪ್ರೊಡಕ್ಷನ್ ಡೇಟಾಬೇಸ್ನಲ್ಲಿ (production database) prisma migrate reset ಅನ್ನು ಎಂದಿಗೂ ಬಳಸಬೇಡಿ.
ಒಂದು ವೇಳೆ ಮೈಗ್ರೇಷನ್ ಮಾರ್ಪಾಡು ಮಾಡಲ್ಪಟ್ಟಿದೆ ಅಥವಾ ನೀವು ಸ್ಕೀಮಾವನ್ನು (schema) ರಿಸೆಟ್ ಮಾಡಬೇಕಾಗಿದೆ ಎಂಬ ಸಂದೇಶ ಕಂಡರೆ, ತಕ್ಷಣ ನಿಲ್ಲಿಸಿ. ರಿಸೆಟ್ ಮಾಡುವುದರಿಂದ ನಿಮ್ಮ ಎಲ್ಲಾ ಡೇಟಾ ಅಳಿಸಿಹೋಗುತ್ತದೆ. ನೀವು ಯಾವುದೇ ಡೇಟಾವನ್ನು ಕಳೆದುಕೊಳ್ಳದೆ ಈ ಸಂಘರ್ಷಗಳನ್ನು ಮ್ಯಾನುಯಲ್ ಆಗಿ ಸರಿಪಡಿಸಬಹುದು.
ಸಾಮಾನ್ಯ 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 ಮೈಗ್ರೇಷನ್ಗಳನ್ನು ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ (timestamp) ಕ್ರಮದಲ್ಲಿ ಮರುಕಳಿಸುತ್ತದೆ (replays). • ಪರಿಹಾರ: ಕಾಲಮ್ ಅನ್ನು ಮೊದಲು ಸೃಷ್ಟಿಸುವ ಮೈಗ್ರೇಷನ್ಗೆ SQL ಕೋಡ್ ಅನ್ನು ವರ್ಗಾಯಿಸಿ.
ದೋಷ: RLS ಪಾಲಿಸಿಯಿಂದ DROP COLUMN ನಿರ್ಬಂಧಿಸಲ್ಪಟ್ಟಿದೆ
• PostgreSQL Row Level Security ಪಾಲಿಸಿಯನ್ನು ಕಾಲಮ್ಗಳಿಗೆ ಜೋಡಿಸುತ್ತದೆ.
• ಪರಿಹಾರ: ಕಾಲಮ್ಗಳನ್ನು ಡ್ರಾಪ್ ಮಾಡುವಾಗ CASCADE ಬಳಸಿ.
• ಉದಾಹರಣೆ: ALTER TABLE "my_table" DROP COLUMN IF EXISTS "tenant_id" CASCADE;
ಸುರಕ್ಷಿತ ಮೈಗ್ರೇಷನ್ಗಳಿಗಾಗಿ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
- ಮೊದಲು ಡೇಟಾಬೇಸ್ ಅನ್ನು ಕ್ವೇರಿ (query) ಮಾಡಿ. ಕಾಲಮ್ ಅಥವಾ ಇಂಡೆಕ್ಸ್ (index) ಇದೆಯೇ ಎಂದು ಊಹಿಸಬೇಡಿ. ಮೈಗ್ರೇಷನ್ ಕೋಡ್ ಬರೆಯುವ ಮೊದಲು ನಿಮ್ಮ ನೈಜ ಡೇಟಾಬೇಸ್ ಸ್ಕೀಮಾವನ್ನು ಪರಿಶೀಲಿಸಲು ನೇರ 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: ಹೊಸ ಹ್ಯಾಶ್ ಅನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಿ ಮತ್ತು _prisma_migrations ನಲ್ಲಿನ ಎಲ್ಲಾ ರೋಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ.
• Shadow DB ದೋಷ: ನಿಮ್ಮ ಟೈಮ್ಸ್ಟ್ಯಾಂಪ್ ಕ್ರಮವನ್ನು ಪರಿಶೀಲಿಸಿ ಮತ್ತು SQL ಲಾಜಿಕ್ ಅನ್ನು ವರ್ಗಾಯಿಸಿ.
• RLS ದೋಷ: ನಿಮ್ಮ DROP ಸ್ಟೇಟ್ಮೆಂಟ್ಗಳಿಗೆ (statements) CASCADE ಅನ್ನು ಸೇರಿಸಿ.
