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

Postgres函数内无法获取输入参数值提示列不存在如何解决

错误原因
  • 你创建的函数指定了LANGUAGE 'sql',属于SQL语言函数,本身不支持RAISE NOTICE语法,该语法是PL/pgSQL语言的专属特性。
  • 函数体中嵌套的DO代码块是独立的执行上下文,默认无法访问外层SQL函数的入参sample,DO块作用域内没有该变量,因此执行时会抛出「字段sample不存在」的报错。
修复方案

方案1:将函数改为PL/pgSQL类型(推荐)

直接修改函数的语言类型为plpgsql,移除多余的DO嵌套,可直接访问入参并打印日志:

CREATE OR REPLACE FUNCTION public.test_function(
        sample integer)
        RETURNS json
        LANGUAGE plpgsql
        COST 100
        VOLATILE PARALLEL UNSAFE
AS $BODY$
BEGIN
  raise notice 'test: %',sample;
  return json_agg(1);
END
$BODY$;

select test_function(10);

方案2:保留SQL函数格式,给DO块传参

如果必须使用SQL语言函数,可通过USING关键字将外层参数传入DO块内部使用:

CREATE OR REPLACE FUNCTION public.test_function(
        sample integer)
        RETURNS json
        LANGUAGE 'sql'
        COST 100
        VOLATILE PARALLEL UNSAFE
AS $BODY$
DO $$
BEGIN
  raise notice 'test: %', $1;
END
$$ USING sample;
select json_agg(1);
$BODY$;

select test_function(10);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:04