منتجك شغّال في المعاينة، وبعد النشر صفحة معيّنة تتعطّل، وفي السجل: relation "public.profiles" does not exist. أو مع Prisma: The table public.profiles does not exist in the current database. المعنى: الكود يطلب جدول اسمه profiles، وقاعدة البيانات اللي يتصل فيها ما فيها جدول بهالاسم.
كلمة relation هنا تعني جدول، أو view. يعني الخطأ يقول بالحرف: «ما لقيت الجدول».
ليش الجدول «موجود عندي»
لأنه غالبًا موجود فعلًا، لكن في قاعدة بيانات ثانية. الأسباب اللي نشوفها أكثر:
- التغييرات ما انطبقت على قاعدة الإنتاج: الجداول تنبني بملفات تسمّى migrations. أداة الذكاء الاصطناعي أنشأت الجدول في قاعدة التجربة، أو كتبت ملف migration وما أحد طبّقه على القاعدة اللي يستخدمها الموقع المنشور.
- الموقع يتصل بقاعدة ثانية: رابط قاعدة البيانات في إعدادات النشر يأشّر على مشروع Supabase قديم، أو على مشروع التجربة، أو بالعكس. يصير كثير لما تنقل المنتج من Lovable أو Bolt لاستضافة ثانية.
- حرف كبير: الجدول انعمل باسم
Profilesبين علامتي تنصيص، و Postgres يعامله كاسم مختلف عنprofiles. الكود يطلب الصغير فما يلقاه. - schema ثاني: الجدول موجود، لكن في schema غير
public، والكود يدوّر عليه فيpublic. - الجدول انحذف أو تغيّر اسمه في تعديل سواه الذكاء الاصطناعي، والكود في مكان ثاني لسا يستخدم الاسم القديم.
كيف تتأكد بنفسك
- خذ اسم الجدول من رسالة الخطأ بالضبط.
- افتح إعدادات منصة النشر، وشوف رابط قاعدة البيانات أو رابط مشروع Supabase. هل هو نفس المشروع اللي تفتحه أنت في لوحة Supabase؟ قارن رقم المشروع في الرابط.
- في المشروع اللي يتصل فيه الموقع المنشور، افتح Table Editor ودوّر على الجدول. موجود؟ في أي schema؟ اسمه بنفس الحروف؟
- إذا تستخدم Supabase CLI، الأمر
supabase migration listيعرض الـ migrations المحلية جنب اللي انطبقت على المشروع البعيد. أي سطر ناقص من جهة المشروع البعيد هو تغيير ما وصل.
الحل اللي لا تسويه
- إنشاء الجدول بيدك في الإنتاج من لوحة Supabase عشان يمشي الحال. الجدول ينعمل، لكن غالبًا بأعمدة أو قواعد RLS تختلف عن اللي يتوقعها الكود، وقاعدتك تصير مختلفة عن ملفات الـ migrations، والمشكلة الجاية أصعب.
- أوامر إعادة الضبط. أوامر مثل
prisma migrate reset، أوprisma db push --force-reset، أوsupabase db resetعلى قاعدة حقيقية، تمسح البيانات كلها وتبنيها من جديد. أدوات الذكاء الاصطناعي تقترحها لأنها «تحل» الخطأ في التجربة. على قاعدة فيها عملاء، هذا مسح لبياناتهم. - كود ينشئ الجدول إذا ما لقاه وقت التشغيل. يخفي الخطأ ويخلّي شكل قاعدتك يعتمد على أي صفحة انفتحت أول.
الحل الصح
- خذ نسخة احتياطية أول، وتأكد إنها ترجع. الطريقة في نسختك الاحتياطية شغّالة فعلًا؟.
- تأكد إن الموقع المنشور يتصل بالقاعدة الصح.
- طبّق الـ migrations الناقصة على قاعدة الإنتاج بالترتيب، بعد ما تقرأ إيش فيها. في Supabase بالأمر
supabase db push، وفي Prisma بـprisma migrate deploy، وهذا الأمر يطبّق الناقص فقط وما يمسح شي. - إذا الاسم بحرف كبير، الأفضل توحّد الأسماء بحروف صغيرة.
- من الحين: أي تغيير على الجداول يمر بملف migration، ويوصل لقاعدة الإنتاج كجزء من النشر، مو بيد أحد.
هذا الخطأ واحد من الأسباب الأشهر لما يشتغل عندك ثم يتعطّل بعد النشر.
تبي أحد يطبّقها معك؟
تطبيق تغييرات على قاعدة فيها بيانات عملاء شغلة تستاهل عين ثانية. مكالمة استشارية نراجع فيها الـ migrations ونطبّقها معك. إذا قاعدة التجربة والإنتاج صارت مختلفة في أشياء كثيرة وتبيها تتوحّد، فيه الإصلاح المباشر.