能否用PostgreSQL定时任务调用Supabase Edge Function?报错求助
解决PostgreSQL定时任务调用Supabase Edge Function的函数不存在错误
问题根源
你遇到的http_post(unknown) does not exist错误,核心原因是使用了错误的HTTP扩展及函数名:
- 传统PostgreSQL的
http扩展没有http_post函数,且Supabase默认推荐使用pg_net扩展处理HTTP请求,而非旧的http扩展。 - 即便你之前用GET请求成功,那也是因为误打误撞用了
http_get(旧扩展的函数),但POST请求无对应函数,因此报错。
解决方案
1. 启用正确的HTTP扩展pg_net
先在Supabase SQL编辑器中执行以下语句,确保pg_net扩展已启用:
CREATE EXTENSION IF NOT EXISTS pg_net;
2. 使用pg_net的正确函数调用
pg_net扩展中,POST请求的函数是net.http_post,而非http_post。同时需要注意:
- URL需明确转换为
text类型,避免参数类型不匹配 - 若Edge Function需要请求体或请求头,需补充对应参数(无需求可传空值)
调整后的定时任务代码如下:
SELECT cron.schedule( 'api-test-insert', '15 * * * *', $$ SELECT status FROM net.http_post( url := '<supabase edge function endpoint URL>'::text, body := '{}'::jsonb, -- 无请求体时传空JSON即可 headers := '{"Content-Type": "application/json"}'::jsonb ) $$ );
3. 额外注意事项
- 确认Supabase项目已开启
pg_net扩展权限(在控制台「数据库」→「扩展」中可查看) - 替换URL为实际的Edge Function完整地址,格式如
https://<project-ref>.supabase.co/functions/v1/your-function - 若Edge Function需要鉴权,需在
headers中添加{"Authorization": "Bearer <your-api-key>"}
内容的提问来源于stack exchange,提问作者xkm
相关产品推荐
相关产品推荐

