Hasura - query没有结果数据的目的地



在Hasura,我试图写一个基于plpgsql的函数,应该返回t_documents。该函数应该接受各种可选参数,根据参数值,它应该运行适当的SQL(使用IF条件检查)并返回记录。这是我的目标。

我从没有参数的简单函数开始,该函数在Hasura中成功创建和跟踪,但是当尝试查询时,它抛出"query has no destination for result data"

任何有助于实现目标的帮助都是非常感谢的

CREATE OR REPLACE FUNCTION dms.fngetdocs()
RETURNS SETOF dms.t_documents
LANGUAGE plpgsql
STABLE
AS $function$
BEGIN
SELECT *
FROM dms.t_documents;
END;    
$function$

每个返回行的SQL语句(如SELECT,但也有INSERTRETURNING等)必须有一个结果数据的目标。这就是错误信息告诉你的。要么赋值变量,要么返回给调用者。若要丢弃结果,请使用PERFORM而不是SELECT。看到:

  • SELECT在PL/pgSQL函数中引发异常
  • PL/pgSQL: PERFORM vs CALL
  • PL/pgSQL函数中的SELECT或PERFORM

但你显然想返回行。您的PL/pgSQL函数将像这样工作:

CREATE OR REPLACE FUNCTION dms.fngetdocs()
RETURNS SETOF dms.t_documents
LANGUAGE plpgsql STABLE PARALLEL SAFE AS
$func$
BEGIN
RETURN QUERY
SELECT * FROM dms.t_documents;
END
$func$

:

  • 如何在PostgreSQL函数中返回SELECT的结果?
  • 当然,

意义不大。您可以直接使用SELECT * FROM dms.t_documents;,而不是调用该函数。

或者使用更简单的SQL函数,自动返回SELECT的结果:

CREATE OR REPLACE FUNCTION dms.fngetdocs()
RETURNS SETOF dms.t_documents
LANGUAGE sql STABLE PARALLEL SAFE AS
$func$
SELECT * FROM dms.t_documents;
$func$;

参见新增PARALLEL SAFE的使用手册

最新更新