首页 > 解决方案 > 导入有效的 SQL 函数时,pgAdmin4 返回类型不匹配?

问题描述

我有这个人有同样的问题,答案涉及使用自定义 SQL 函数从 postgres 中的 jsons 数组中删除 json 对象

当我单击Functions > Create并粘贴 SQL 代码时,我收到错误,因为它说返回类型不是 jsonb 但它是?

ERROR: return type mismatch in function declared to return jsonb
DETAIL: Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING.
CONTEXT: SQL function "remove_element"

这是 SQL:

create function remove_element(p_input jsonb, p_to_remove jsonb)
  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 <> p_to_remove;
$$
language sql 
immutable;

returns jsonb在功能上说,所以我看不出它是return type mismatch什么?

我正在尝试编写一个查询,该查询可以从对象的 jsonb 数组中删除特定对象,例如我的名称为 cyberpunk-2077 并希望将其从列表中删除:

[
    {
        "game": "cyberpunk-2077",
    },
    {
        "game": "new-pokemon-snap",
    }
]

标签: postgresqlpgadmin-4

解决方案


您的图像显示了嵌入在 GUI 窗口的代码选项卡中的整个 CREATE FUNCTION 语句。只有函数的主体($$标记之间的部分)属于那里。其余的东西属于 GUI 窗口的其他选项卡。我不知道你在这些选项卡的其余部分有什么,但很明显,当 pgadmin4 完全组装它们时,结果是错误的。

如果您不想使用 GUI 函数创建器,请不要使用它。只需将整个 CREATE FUNCTION 语句放入 SQL 窗口并运行即可。或者更好的是,如果您不想要 GUI 功能,首先不要使用 GUI 工具。


推荐阅读