Hasura原生SQL参数绑定错误:interval语法无效问题排查
解决Hasura原生SQL查询中integer参数构造interval的语法错误
问题根源
你错误地用字符串插值风格的写法构造PostgreSQL的interval值,而Hasura的参数绑定机制会将{{number_of_days}}替换为参数占位符(如($2)::integer),最终生成的字符串"%(($2)::integer)s days"不符合PostgreSQL的interval语法规范,导致解析失败。
正确解决方案
无需修改参数类型,保持number_of_days为integer类型,改用PostgreSQL支持的两种合法方式构造interval:
方式1:整数乘以基础interval单位
直接将参数与interval '1 day'相乘,这是PostgreSQL支持的数值与interval运算:
WHERE d.time >= CURRENT_DATE - ({{number_of_days}} * interval '1 day')
方式2:使用make_interval函数
PostgreSQL的make_interval函数可直接接收整数类型的days参数:
WHERE d.time >= CURRENT_DATE - make_interval(days => {{number_of_days}})
验证修改
保持你的GraphQL查询不变:
query MyQuery { PR_Timelinedaily_site_locations(args: {number_of_days: 3}) { max_val min_val forecast_val date } }
修改原生SQL的WHERE子句后,即可正常执行查询,不会再出现interval语法错误。
内容的提问来源于stack exchange,提问作者Vinay
相关产品推荐
相关产品推荐

