متجر Supabase Vector - خطأ 403 في جدول البيانات

اوصف المشكلة/الخطأ/السؤال

أتابع دورة n8n وأنا متأكد تماماً من أن لدي كل شيء معد بشكل صحيح، لكن كلما قمت بتنفيذ سير العمل أحصل على خطأ في الوصول. حسابي في Supabase متصل عبر مفتاح API “service_role
secret” في علامة التبويب القديمة، لذا لا أفهم لماذا لا يستطيع العقدة الوصول إلى الجدول.
حاولت للتو فتح Data API access في Supabase وكشفت جدولي للوصول، لكنني ما زلت تلقيت خطأ وصول مختلفاً.
سأكون ممتناً لأي مساعدة مقدمة

ما رسالة الخطأ (إن وجدت)؟

Error inserting: permission denied for sequence documents_id_seq 403 Forbidden

يرجى مشاركة سير العمل الخاص بك

شارك الإخراج الذي أرجعته العقدة الأخيرة

لم تُرجع إخراجاً واضحاً، لكن كل ما أحتاجه هو إرسال بيانات المتجه المدمجة مرة أخرى إلى Supabase في أجزاء.

معلومات حول إعداد n8n الخاص بك

  • إصدار n8n: 2.35.7
  • قاعدة البيانات (الافتراضي: SQLite):
  • إعداد n8n EXECUTIONS_PROCESS (الافتراضي: own, main):
  • تشغيل n8n عبر (Docker, npm, n8n cloud, تطبيق سطح المكتب): في المتصفح
  • نظام التشغيل: Windows 11 Home

هذا هو كود محرر SQL الخاص بي لمتجر متجهات بسيط في حالة ارتباطه بأي شيء:

-- 1. تفعيل امتداد pgvector للسماح بأنواع بيانات المتجهات
create extension if not exists vector;

-- 2. إنشاء جدول المستندات لتخزين التضمينات الخاصة بك
create table if not exists documents (
    id bigserial primary key,
    content text,                  -- يخزن جزء النص
    metadata jsonb,                -- يخزن البيانات الوصفية للمصدر أو اسم الملف أو المؤلف
    embedding vector(1536)         -- 1536 بُعد هو المعيار لنماذج OpenAI
);

-- 3. إنشاء فهرس HNSW للبحث عن التشابه بأداء عالي
-- ملاحظة: استخدم 'vector_cosine_ops' لعمليات البحث عن مسافة الكوساين
create index on documents using hnsw (embedding vector_cosine_ops);

-- 4. إنشاء دالة البحث عن التشابه (يتم استدعاؤها بواسطة أدوات الذكاء الاصطناعي/RAG)
create or replace function match_documents (
  query_embedding vector(1536),
  match_threshold float,
  match_count int
)
returns table (
  id bigint,
  content text,
  metadata jsonb,
  similarity float
)
language plpgsql stable
as $$
begin
  return query
  select
    documents.id,
    documents.content,
    documents.metadata,
    1 - (documents.embedding <=> query_embedding) as similarity
  from documents
  where 1 - (documents.embedding <=> query_embedding) > match_threshold
  order documents.embedding <=> query_embedding asc
  limit match_count;
end;
$$;

مرحباً @Mazen_Hassan، بينما تنتظر الرد، إليك بعض الأشياء التي قد تساعدك:

الموارد المقترحة

تم مطابقتها تلقائياً مع سؤالك.

الوثائق:

المنتدى:

@jabbson, @fahmiiireza, @Oskar_Niedojadlo - لقد ساعدتم مع مشاكل مشابهة من قبل، هل يمكنكم إلقاء نظرة؟

تم الاقتراح تلقائياً بواسطة بوت مجتمع n8n. إنه برنامج تجريبي - يرجى مشاركة تعليقاتك هنا.

مرحباً @Mazen_Hassan
عملية الإدراج تترك id بالقيمة الافتراضية bigserial، لذلك يستدعي Postgres nextval على التسلسل خلف تلك الحقل، والتسلسل يحمل صلاحياته الخاصة منفصلة عن جدول. هذا هو السبب في أن الجدول قابل للوصول ولكن عملية الإدراج تعيد 403. شغّل هذا في محرر SQL:

grant usage, select on sequence documents_id_seq to anon, authenticated, service_role;

احتفظ باسم التسلسل الدقيق حتى وإن كان العقدة تشير إلى knowledge_chunks، الخطأ ينسب اسم التسلسل الذي يستحصل الجدول من خلاله على معرفاته.
لم يتم إنشاء match_documents الخاص بك أيضاً، الخطوة 4 تحتوي على order documents.embedding حيث تحتاج إلى order by، لذلك فشلت تلك العبارة بينما مرّت الثلاث الأولى. الجدول والدالة المعروف أنهما صحيحان موجودان هنا:

مرحبًا @Anshul_Namdev

شكرًا على التوضيح الرائع! لقد نسخت سطر الكود ووضعته في نهاية محرر SQL الخاص بي. بشكل طريف، عندما اختبرته، حصلت على نفس الخطأ. اتضح أن المحرر لم يكن قد حفظ التغييرات بعد واستغرق وقتًا طويلًا للقيام بذلك، ههه.

أقدر مساعدتك يا Anshul :smile: