Supabase Vector Store - 資料表 403 錯誤

描述問題/錯誤/問題

我正在學習 n8n 課程,我非常確定我已經正確設定了所有內容,但每當我執行工作流程時,我都會收到存取錯誤。我的 Supabase 帳戶是通過舊版標籤中的 API 金鑰 「service_role secret」 連接的,所以我不明白為什麼節點無法存取表格。
我剛才嘗試在 Supabase 中開啟 Data API 存取權限並公開了我的表格進行存取,但仍然收到不同的存取錯誤。
非常感謝任何提供的幫助

錯誤訊息是什麼(如果有的話)?

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. 建立 documents 表格來儲存您的嵌入
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. 建立相似度搜尋函式(由 AI/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,也要保持完全相同的序列名稱,錯誤訊息中命名的是該表格用來提取 ID 的序列。
你的 match_documents 也沒有被建立,第 4 步中 order documents.embedding 應該是 order by,所以該陳述式失敗了,而前三個陳述式執行成功了。已知運作正常的表格和函式在這裡:

嗨 @Anshul_Namdev

感謝你的詳細說明!我複製了那行程式碼,並將它貼到我的 SQL 編輯器的最後。有趣的是,當我測試它時,我收到了同樣的錯誤。後來才發現編輯器還沒有儲存變更,只是花了一些時間才儲存,哈哈。

我很感謝你的幫助 Anshul :smile: