relation does not exist: الجدول موجود عندك ومو موجود بعد النشر

خطأ relation "public.x" does not exist في Supabase و Postgres و Prisma: ليش الجدول موجود في التجربة ومفقود بعد النشر، وكيف تطبّق التغييرات بدون ما تمسح بياناتك.

22 أكتوبر 2026 (11 جمادى الأولى 1448 هـ) · قراءة 4 دقائق · كتبها م. معاذ أحمد

منتجك شغّال في المعاينة، وبعد النشر صفحة معيّنة تتعطّل، وفي السجل: 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.
  • الجدول انحذف أو تغيّر اسمه في تعديل سواه الذكاء الاصطناعي، والكود في مكان ثاني لسا يستخدم الاسم القديم.

كيف تتأكد بنفسك

  1. خذ اسم الجدول من رسالة الخطأ بالضبط.
  2. افتح إعدادات منصة النشر، وشوف رابط قاعدة البيانات أو رابط مشروع Supabase. هل هو نفس المشروع اللي تفتحه أنت في لوحة Supabase؟ قارن رقم المشروع في الرابط.
  3. في المشروع اللي يتصل فيه الموقع المنشور، افتح Table Editor ودوّر على الجدول. موجود؟ في أي schema؟ اسمه بنفس الحروف؟
  4. إذا تستخدم Supabase CLI، الأمر supabase migration list يعرض الـ migrations المحلية جنب اللي انطبقت على المشروع البعيد. أي سطر ناقص من جهة المشروع البعيد هو تغيير ما وصل.

الحل اللي لا تسويه

  • إنشاء الجدول بيدك في الإنتاج من لوحة Supabase عشان يمشي الحال. الجدول ينعمل، لكن غالبًا بأعمدة أو قواعد RLS تختلف عن اللي يتوقعها الكود، وقاعدتك تصير مختلفة عن ملفات الـ migrations، والمشكلة الجاية أصعب.
  • أوامر إعادة الضبط. أوامر مثل prisma migrate reset، أو prisma db push --force-reset، أو supabase db reset على قاعدة حقيقية، تمسح البيانات كلها وتبنيها من جديد. أدوات الذكاء الاصطناعي تقترحها لأنها «تحل» الخطأ في التجربة. على قاعدة فيها عملاء، هذا مسح لبياناتهم.
  • كود ينشئ الجدول إذا ما لقاه وقت التشغيل. يخفي الخطأ ويخلّي شكل قاعدتك يعتمد على أي صفحة انفتحت أول.

الحل الصح

  1. خذ نسخة احتياطية أول، وتأكد إنها ترجع. الطريقة في نسختك الاحتياطية شغّالة فعلًا؟.
  2. تأكد إن الموقع المنشور يتصل بالقاعدة الصح.
  3. طبّق الـ migrations الناقصة على قاعدة الإنتاج بالترتيب، بعد ما تقرأ إيش فيها. في Supabase بالأمر supabase db push، وفي Prisma بـ prisma migrate deploy، وهذا الأمر يطبّق الناقص فقط وما يمسح شي.
  4. إذا الاسم بحرف كبير، الأفضل توحّد الأسماء بحروف صغيرة.
  5. من الحين: أي تغيير على الجداول يمر بملف migration، ويوصل لقاعدة الإنتاج كجزء من النشر، مو بيد أحد.

هذا الخطأ واحد من الأسباب الأشهر لما يشتغل عندك ثم يتعطّل بعد النشر.

تبي أحد يطبّقها معك؟

تطبيق تغييرات على قاعدة فيها بيانات عملاء شغلة تستاهل عين ثانية. مكالمة استشارية نراجع فيها الـ migrations ونطبّقها معك. إذا قاعدة التجربة والإنتاج صارت مختلفة في أشياء كثيرة وتبيها تتوحّد، فيه الإصلاح المباشر.

عندك نفس المشكلة؟

علّمنا إيش صار بدون كلام تقني، ونقول لك إيش تحتاج وكم يكلّف.

ابدأ طلبك

بدون أي كلمة سر · عرض السعر مجاني