我有一个 Postgres 函数,可以在 Dbeaver 中按预期工作
CREATE OR REPLACE FUNCTION public.getallusersv2()
RETURNS SETOF users
LANGUAGE plpgsql
AS $function$
begin
RETURN QUERY
SELECT DISTINCT * FROM users ORDER BY id;
return;
END;
$function$;
但是,当尝试使用 Npgsql 调用该函数时,我没有得到预期的结果。
这是我用来执行和读取数据的代码
var cmd = new NpgsqlCommand("SELECT getallusersv2()", conn);
var reader = cmd.ExecuteReader();
我写了一个方法,应该映射我返回的结果,但我什至无法做到这一点,因为我似乎没有任何数据可以解析。
调试时我注意到以下错误:
The field 'getallusersv2' has a type currently unknown to Npgsql (OID 16421). You can retrieve it as a string by marking it as unknown, please see the FAQ.
但真正突出的是,似乎没有返回任何数据。相反,它似乎只是一个以被调用的函数命名的空对象。
好吧,在过去几个小时里我不断地敲头之后,我终于明白了。 显然,你必须将
SELECT
写成如下SELECT * FROM getallusersv2()
我会留下这个问题,以防其他人遇到同样的问题。
你真的节省了我的时间,三天以来我一直在努力从 cokcroach db 函数检索记录到 uisng .net core 和 Npgsql Ef core 的列表。使用 SELECT * FROM getallusersv2() 语法帮助我获取数据,而不是使用 Select getallusersv2();