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
求问问题出在哪?
问题原因与修复方案
返回类型不匹配
你声明函数返回setof available_dates,但查询返回的是date和count两个字段,和available_dates表的结构(id、date、user_id)完全不符,这是核心问题之一。潜在的不可见特殊字符
报错提示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
相关产品推荐
相关产品推荐

