本地Supabase Edge Function报错:public.<table_name>关系不存在
解决本地Supabase Edge Function找不到public表的问题
核心原因
本地运行的Supabase是独立的Docker容器实例,其数据库默认是空的,和云端实例完全分离。你云端存在public.websites表,但本地数据库未同步该表结构,因此Edge Function执行查询时会抛出“relation不存在”的错误。
解决方案
- 同步云端数据库到本地
在项目根目录执行命令,将云端的表结构和数据拉取到本地实例:
supabase db pull
拉取完成后重启本地Supabase服务:
supabase stop && supabase start
- 确认本地环境变量配置
检查项目下的supabase/.env文件,确保Edge Function使用本地实例的环境变量:
SUPABASE_URL应为http://127.0.0.1:54321(本地Supabase的API地址)SUPABASE_ANON_KEY是本地实例的匿名密钥,而非云端密钥
验证本地数据库表存在
打开本地Supabase Studio(地址:http://127.0.0.1:54323),查看publicschema下是否存在websites表,确认表结构与云端一致。补全Edge Function的响应逻辑
你的代码缺少请求响应逻辑,会导致请求无结果返回,建议补充完整:
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2.45.4' Deno.serve(async (req) => { try { const supabase = createClient( Deno.env.get('SUPABASE_URL') ?? '', Deno.env.get('SUPABASE_ANON_KEY') ?? '', { global: { headers: { Authorization: req.headers.get('Authorization')! } } } ) // Fetch all websites from the 'websites' table const { data: websites, error } = await supabase .from('websites') .select('url') .limit(1) if (error) { console.log(error) throw error } // 返回查询结果 return new Response(JSON.stringify(websites), { headers: { 'Content-Type': 'application/json' }, status: 200 }) } catch (err) { // 返回错误响应 return new Response(JSON.stringify({ error: err.message }), { headers: { 'Content-Type': 'application/json' }, status: 500 }) } })
内容的提问来源于stack exchange,提问作者NicoCaldo
相关产品推荐
相关产品推荐

