Sql Postgres函数-带回退的解析字段

Sql Postgres函数-带回退的解析字段,sql,postgresql,function,hasura,Sql,Postgresql,Function,Hasura,我有一个名为列表的表,其中包含字段类型+类型自定义,其中类型是一个严格的值选择,当类型设置为值“自定义”时,我希望能够将其动态解析为类型自定义-字段中的任何内容 SELECT (CASE WHEN "type" = 'custom' THEN "typeCustom" ELSE "type" END) as "typeResolved" FROM "Listing" 我天真的方式和快速的谷歌搜索告诉我应该这样做 CREATE FUNCTION Listing_typeResolved(

我有一个名为
列表
的表,其中包含字段
类型
+
类型自定义
,其中类型是一个严格的值选择,当类型设置为值“自定义”时,我希望能够将其动态解析为
类型自定义
-字段中的任何内容

SELECT 
   (CASE WHEN "type" = 'custom' THEN "typeCustom" ELSE "type" END) as "typeResolved"
FROM "Listing"
我天真的方式和快速的谷歌搜索告诉我应该这样做

CREATE FUNCTION Listing_typeResolved(Listing_row "Listing")
RETURNS TEXT 
LANGUAGE sql
STABLE AS $$
  SELECT (CASE WHEN "type" = 'custom' THEN "typeCustom" ELSE "type" END)
$$
但是,它给了我以下错误:

ERROR:  missing FROM-clause entry for table "Listing"
LINE 5:   SELECT (CASE WHEN "Listing"."type" = 'custom' THEN "Listin...
                            ^
旁注:我使用的是Hasura,所以我想这样做是为了公开一个新版本。

试试看

create function "Listing_typeResolved"(arg_type text, arg_typecustom text) returns text as
$$
 select case when arg_type = 'custom' then arg_type else arg_typecustom end;
$$
language sql immutable strict;
然后您可以在这样的查询中使用它

select "Listing_typeResolved"("type", "typeCustom") as "typeResolved" from "Listing";
将类型解析逻辑(无论多么简单)封装到函数中

请考虑完全不同的方法-创建/使用视图:

将视图“ListingV”创建为
选择“type”=“custom”时的case,然后选择“typeCustom”或“type”结束时的“typeResolved”,
从“上市”;

希望这有帮助。

为什么要使用
?删除它,应该可以正常工作。它也不起作用-如果表不全是小写的,我也需要这样做。但是有了这种逻辑,我的
选择
-示例也不起作用。删除引号时,我得到“错误:类型列表不存在。”“。这很漂亮,但不幸的是,hasura只允许我在函数中输入1个输入参数。但我可能会做一个视图。我非常确定hasura允许您为每个函数添加多个参数。在函数中添加多个参数时遇到了什么问题?