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

PostgreSQL创建自定义函数后调用提示function does not exist如何解决

问题原因

PostgreSQL对标识符的大小写处理有明确规则:

  • 未用双引号包裹的标识符,会被自动转换为小写处理
  • 用双引号包裹的标识符,会严格保留创建时的大小写

你创建函数时使用了public."SampledImpCountToOriginal"写法,双引号强制保留了驼峰格式的函数名;但调用时写的SampledImpCountToOriginal没有加双引号,PostgreSQL会自动转为全小写的sampledimpcounttooriginal去匹配,自然找不到对应函数。

解决方案

有两种可行方案,优先推荐第二种,更符合PostgreSQL开发规范:

方案1:调用时加双引号匹配大小写

调用时给函数名加上双引号即可正确匹配,示例语句:

SELECT public."SampledImpCountToOriginal"(5);

如果你的search_path已经包含public schema,也可以省略schema前缀:

SELECT "SampledImpCountToOriginal"(5);

方案2:重建函数去掉双引号

删除原有函数后,用不带双引号的语句重新创建,后续调用无需加双引号,使用更方便:

-- 先删除原有函数
DROP FUNCTION public."SampledImpCountToOriginal"(IN integer);

-- 重新创建,函数名不使用双引号,会自动转为小写存储
CREATE FUNCTION public.sampledimpcounttooriginal(IN integer)
    RETURNS numeric
    LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
    RETURN CASE WHEN $1 > 4 THEN EXP(POW($1 - 1.88, 1/2.3)) ELSE $1 END;
END;
$BODY$;

重建后就可以直接用常规方式调用:

SELECT sampledimpcounttooriginal(5);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:54:00