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

.NET 7中使用SqlQuery调用PostgreSQL SUM函数报错42883

解决.NET 7中SqlQuery调用PostgreSQL SUM函数报错问题

错误原因

问题出在SQL语句里的"SUM"——PostgreSQL中,双引号包裹的内容会被当作区分大小写的标识符(比如自定义列名、表名),而内置聚合函数sum是不区分大小写且不需要双引号的。当你用"SUM"时,PostgreSQL会认为你在调用一个名为SUM的自定义函数,而非内置的sum,因此抛出“函数不存在”的错误。外部工具执行正常是因为部分工具会自动忽略不必要的双引号,或是你在外部执行时未给SUM加双引号。

解决方案

  1. 移除SUM周围的双引号,直接使用SUM(...)
  2. 替换字符串插值拼接SQL的方式(存在SQL注入风险),改用参数化查询传递gte参数

修正后的代码:

var totalTime = await this.Context
                          .Database
                          .SqlQuery<int>(@"
                              SELECT SUM(extract(day from(NOW()-""stripe_created_date""))::integer) 
                              FROM stripe.""subscription"" 
                              WHERE ""stripe_created_date"" >= @Gte 
                                AND ""status"" <> 'incomplete_expired' 
                                AND ""status"" <> 'incomplete' 
                                AND ""status"" <> 'canceled'", 
                          new NpgsqlParameter("@Gte", gte))
                          .FirstOrDefaultAsync();

补充说明

PostgreSQL的标识符(表名、列名)若用双引号包裹,必须严格匹配大小写;若不用双引号,系统会自动转为小写。你的表名stripe."subscription"写法是正确的(因为表名可能大小写敏感),但内置函数名绝对不能加双引号。另外,参数化查询不仅能避免SQL注入,还能自动处理日期等特殊类型的参数转换问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:45:05