You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase中含COUNT与GROUP BY的SQL函数创建报错求助

问题:Supabase SQL函数语法错误排查

我在Supabase写SQL函数时碰到语法错误,函数代码如下:

create or replace function get_dates(user_id_input uuid, friend_id_input uuid) 
returns setof available_dates
language sql 
as $$ 
SELECT date, COUNT(date) 
FROM available_dates
where user_id = (user_id_input)
or user_id = (friend_id_input)
GROUP BY date
HAVING COUNT(date) > 1;
$$;

执行时报错:Failed to run sql query: syntax error at or near " "

简单函数能正常运行,单独执行这段SQL也能拿到正确结果,但套进函数里使用COUNT和GROUP BY就报错,参数占位符写法已经确认没问题。

available_dates表结构:

id|  date       |user_id
1 | 2022-08-08 | 8888888888
2 | 2022-08-08 | 4444444444
3 | 2022-08-04 | 8888888888
4 | 2022-08-06 | 4444444444

单独执行SQL能得到期望的共同日期统计:

date       | count
2022-08-08 |   2

求问问题出在哪?


问题原因与修复方案

  1. 返回类型不匹配
    你声明函数返回setof available_dates,但查询返回的是date和count两个字段,和available_dates表的结构(id、date、user_id)完全不符,这是核心问题之一。

  2. 潜在的不可见特殊字符
    报错提示syntax error at or near " ",大概率是$$后面的空格包含全角空格、非标准换行符这类不可见特殊字符,复制粘贴代码时很容易出现这种问题。

修正后的函数代码:

create or replace function get_dates(user_id_input uuid, friend_id_input uuid) 
returns table(date date, count bigint) -- 明确指定返回的字段和对应类型
language sql 
as $$
SELECT date, COUNT(date) 
FROM available_dates
where user_id = user_id_input
   or user_id = friend_id_input
GROUP BY date
HAVING COUNT(date) > 1;
$$;

如果确实需要返回setof available_dates,那得调整查询逻辑(比如返回两个用户在共同日期的所有记录),但这和你要统计共同日期的需求不符,所以推荐上面明确返回统计字段的写法。另外建议手动输入函数定义的符号,避免复制粘贴带来的编码问题。


内容的提问来源于stack exchange,提问作者Nsp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:45:51