postgresql - 导入有效的 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",
}
]
解决方案
您的图像显示了嵌入在 GUI 窗口的代码选项卡中的整个 CREATE FUNCTION 语句。只有函数的主体($$
标记之间的部分)属于那里。其余的东西属于 GUI 窗口的其他选项卡。我不知道你在这些选项卡的其余部分有什么,但很明显,当 pgadmin4 完全组装它们时,结果是错误的。
如果您不想使用 GUI 函数创建器,请不要使用它。只需将整个 CREATE FUNCTION 语句放入 SQL 窗口并运行即可。或者更好的是,如果您不想要 GUI 功能,首先不要使用 GUI 工具。
推荐阅读
- python - 压缩文件在到达流结束标记之前结束
- ios - NativeScript - 在 iOS 构建中使用“BottomNavigation”时如何解决此崩溃?
- c# - 在 C# Visual Studio 中没有为一个或多个必需参数提供值
- postgresql - pgAdmin 的“服务器”选项卡为空(Docker Compose)
- node.js - Nestjs UnhandledPromiseRejectionWarning: TypeError: this.flushLogs is not a function
- android - 如何使用数据绑定在 recyclerview 中获取选定的 textView 值(当前位置)?
- angular - Angular 10 - 以字符串形式提供的清理样式和脚本
- python - 从列表列表中绘制一个多线连续可滚动图,图中最多 10 个值
- windows - 尝试构建/无法启动程序时出现 C1083 错误
- javascript - 具有某些属性的接口函数(TypeScript)?