Prisma Migration Conflicts ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਗਾਈਡ
ਪ੍ਰੋਡਕਸ਼ਨ ਡਾਟਾਬੇਸ (production database) 'ਤੇ prisma migrate reset ਨਾ ਚਲਾਓ।
ਜੇਕਰ ਤੁਹਾਨੂੰ ਇਹ ਸੁਨੇਹਾ ਮਿਲਦਾ ਹੈ ਕਿ ਮਾਈਗ੍ਰੇਸ਼ਨ (migration) ਵਿੱਚ ਬਦਲਾਅ ਕੀਤਾ ਗਿਆ ਹੈ ਜਾਂ ਤੁਹਾਨੂੰ ਸਕੀਮਾ (schema) ਨੂੰ ਰੀਸੈੱਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ, ਤਾਂ ਰੁਕ ਜਾਓ। ਰੀਸੈੱਟ ਕਰਨ ਨਾਲ ਤੁਹਾਡਾ ਸਾਰਾ ਡਾਟਾ ਡਿਲੀਟ ਹੋ ਜਾਵੇਗਾ। ਤੁਸੀਂ ਕੁਝ ਵੀ ਗੁਆਏ ਬਿਨਾਂ ਇਹਨਾਂ ਟਕਰਾਵਾਂ (conflicts) ਨੂੰ ਮੈਨੂਅਲ ਤਰੀਕੇ ਨਾਲ ਠੀਕ ਕਰ ਸਕਦੇ ਹੋ।
ਆਮ Prisma Errors ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਕਿਵੇਂ ਠੀਕ ਕਰਨਾ ਹੈ
Error: Migration 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: ਮਾਈਗ੍ਰੇਸ਼ਨ ਲਾਗੂ ਹੋਣ ਤੋਂ ਬਾਅਦ ਬਦਲ ਦਿੱਤੀ ਗਈ (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 ਪਾਲਿਸੀਆਂ ਨੂੰ ਕਾਲਮਾਂ ਨਾਲ ਜੋੜਦੀ ਹੈ।
• ਹੱਲ: ਕਾਲਮ ਡ੍ਰੌਪ ਕਰਦੇ ਸਮੇਂ CASCADE ਦੀ ਵਰਤੋਂ ਕਰੋ।
• ਉਦਾਹਰਨ: ALTER TABLE "my_table" DROP COLUMN IF EXISTS "tenant_id" CASCADE;
ਸੁਰੱਖਿਅਤ ਮਾਈਗ੍ਰੇਸ਼ਨ ਲਈ ਵਧੀਆ ਅਭਿਆਸ (Best Practices)
- ਪਹਿਲਾਂ ਡਾਟਾਬੇਸ ਨੂੰ ਕੁਐਰੀ (query) ਕਰੋ। ਇਹ ਅੰਦਾਜ਼ਾ ਨਾ ਲਗਾਓ ਕਿ ਕੋਈ ਕਾਲਮ ਜਾਂ ਇੰਡੈਕਸ ਮੌਜੂਦ ਹੈ ਜਾਂ ਨਹੀਂ। ਮਾਈਗ੍ਰੇਸ਼ਨ ਕੋਡ ਲਿਖਣ ਤੋਂ ਪਹਿਲਾਂ ਆਪਣੇ ਅਸਲ ਡਾਟਾਬੇਸ ਸਕੀਮਾ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਸਿੱਧੀਆਂ SQL ਕੁਐਰੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰੋ।
IF EXISTSਅਤੇIF NOT EXISTSਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਤੁਹਾਡੀਆਂ ਮਾਈਗ੍ਰੇਸ਼ਨ ਨੂੰ idempotent ਬਣਾਉਂਦਾ ਹੈ। ਇੱਕ idempotent ਮਾਈਗ੍ਰੇਸ਼ਨ ਗਲਤੀਆਂ ਪੈਦਾ ਕੀਤੇ ਬਿਨਾਂ ਕਈ ਵਾਰ ਚਲਾਈ ਜਾ ਸਕਦੀ ਹੈ।- Constraints ਲਈ
DOblocks ਦੀ ਵਰਤੋਂ ਕਰੋ। Foreign Key ਜੋੜਨ ਨੂੰ ਇੱਕ ਚੈੱਕ ਵਿੱਚ ਰੱਖੋ ਤਾਂ ਜੋ ਇਹ ਦੇਖਿਆ ਜਾ ਸਕੇ ਕਿ constraint ਦਾ ਨਾਮ ਪਹਿਲਾਂ ਹੀ ਮੌਜੂਦ ਹੈ ਜਾਂ ਨਹੀਂ। - ਜੇਕਰ ਤੁਸੀਂ Row Level Security ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ, ਤਾਂ ਡ੍ਰੌਪ (drop) ਲਈ ਹਮੇਸ਼ਾ
CASCADEਦੀ ਵਰਤੋਂ ਕਰੋ।
ਸਾਰਾਂਸ਼ ਟੇਬਲ (Summary Table)
• P3018 (mid-run ਵਿੱਚ ਫੇਲ ਹੋ ਗਿਆ): SQL ਠੀਕ ਕਰੋ, ਫਿਰ resolve --rolled-back ਅਤੇ resolve --applied ਦੀ ਵਰਤੋਂ ਕਰੋ।
• Checksum mismatch: ਨਵਾਂ hash ਕੈਲਕੂਲੇਟ ਕਰੋ ਅਤੇ _prisma_migrations ਵਿੱਚ ਸਾਰੀਆਂ ਰੋਅਜ਼ ਨੂੰ ਅਪਡੇਟ ਕਰੋ।
• Shadow DB error: ਆਪਣੇ timestamp ਕ੍ਰਮ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ SQL ਲੌਜਿਕ ਨੂੰ ਬਦਲੋ।
• RLS error: ਆਪਣੇ DROP ਸਟੇਟਮੈਂਟਾਂ ਵਿੱਚ CASCADE ਜੋੜੋ।
