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

pgAdmin4导入合法SQL函数时出现return type mismatch报错求助

报错原因分析

该报错与返回值声明无关,核心触发原因是pgAdmin图形化创建函数的模板冲突:

  • pgAdmin默认的函数创建模板适配plpgsql语言,会自动生成BEGIN/END语句块,你粘贴的是language sql类型的函数代码,不需要包裹块结构,多余的模板代码会导致函数逻辑识别异常,触发该错误。

解决方案

方案1(推荐)

直接打开pgAdmin的查询工具,将你编写的完整CREATE FUNCTION代码粘贴到查询窗口执行,即可正常创建函数。

方案2(使用图形化向导)

打开创建函数界面后,先将语言下拉选项改为SQL,清空界面自动生成的所有模板代码,再粘贴你编写的函数逻辑后保存即可。

函数使用示例

你编写的函数为JSON对象全匹配删除逻辑,针对你给出的测试数组,执行以下调用即可实现需求:

SELECT remove_element(
'[
    {"game": "cyberpunk-2077"},
    {"game": "new-pokemon-snap"}
]'::jsonb,
'{"game": "cyberpunk-2077"}'::jsonb
);

返回结果:

[{"game": "new-pokemon-snap"}]

扩展方案(按指定字段值删除)

如果不需要传入完整匹配对象,仅需根据game字段值删除对应元素,可使用以下变体函数:

create function remove_element_by_game(p_input jsonb, p_game_to_remove text)
  returns jsonb
as
$$
  select coalesce(jsonb_agg(t.item order by t.idx), '[]')
  from jsonb_array_elements(p_input) with ordinality as t(item, idx)
  where t.item ->> 'game' <> p_game_to_remove;
$$
language sql 
immutable;

调用示例:

SELECT remove_element_by_game(
'[
    {"game": "cyberpunk-2077"},
    {"game": "new-pokemon-snap"}
]'::jsonb,
'cyberpunk-2077'
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:48:03