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允许您为每个函数添加多个参数。在函数中添加多个参数时遇到了什么问题?