You need to enable JavaScript to run this app. PostgreSQL中如何调用带JSON参数的void返回函数 解决函数不存在报错
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何调用带JSON参数的void返回函数 解决函数不存在报错

PostgreSQL 自定义函数调用报错解决

报错本质

两次报错中数据库检索的目标函数是myschema._add1hidoc,和你创建的myschema._add1不是同一个对象,这是触发“函数不存在”提示的根源。结合场景拆解,问题出在两处:

  • 函数名输入错误:实际执行的调用语句误将函数名写为带hidoc后缀的_add1hidoc(多为手滑输入、粘贴时带入了多余字符导致),数据库自然无法匹配到你创建的_add1函数。
  • 入参类型不匹配:你定义的函数第二个入参是smallint类型,但传入的数字1默认是integer类型。PostgreSQL不会在integer和smallint之间做隐式类型转换,就算函数名写对,也会因为参数类型不匹配触发同类报错。

正确调用语句

完全匹配函数定义的调用写法如下,执行后即可正常完成数据插入:

SELECT myschema._add1(
  '{"j":["j1", "j2"]}'::json,
  1::smallint,
  '2021-02-26'::date
);

注:PostgreSQL中调用返回void的PL/pgSQL函数,直接在外部会话使用SELECT语法即可,无需使用函数内部专用的PERFORM语法。

排查验证方法

如果执行上述语句仍有报错,可通过系统视图核对myschema下真实存在的函数信息,避免引用错误:

  • 拉取所有和_add1相关的函数定义,确认实际函数名、入参匹配关系:
SELECT 
  n.nspname AS schema,
  p.proname AS function_name,
  pg_get_function_arguments(p.oid) AS params
FROM pg_proc p
JOIN pg_namespace n ON p.pronamespace = n.oid
WHERE n.nspname = 'myschema' 
  AND p.proname LIKE '%_add1%';

如果查询结果中确实存在带hidoc后缀的函数,说明你此前误创建了错误命名的函数,且调用时一直引用了这个错误对象,替换为你实际定义的函数名即可解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 13:06:03