Thread: Re: How to return seto records from seof record function?

Re: How to return seto records from seof record function?

From
"David G. Johnston"
Date:
On Tuesday, February 25, 2025, Олег Самойлов <splarv@ya.ru> wrote:
Postgresql 17.2

How to return seto records from seof record function? I tried pg_background extension:
 

CREATE OR REPLACE FUNCTION public.autonomous (p_script text)

RETURNS SETOF record

LANGUAGE plpgsql

VOLATILE STRICT PARALLEL UNSAFE

AS $autonomous$

DECLARE

l_id integer;

BEGIN

l_id := pg_background_launch(p_script);

RETURN QUERY SELECT * FROM pg_background_result(l_id) AS (r record);

END;

$autonomous$;

 

SELECT * FROM autonomous('SELECT now()') AS (a timestamptz);

 

SQL Error [42804]: ERROR: structure of query does not match function result type
  Detail: Returned type record does not match expected type timestamp with time zone in column 1.
  Where: SQL statement "SELECT * FROM pg_background_result(l_id) AS (r record)" 
PL/pgSQL function autonomous(text) line 6 at RETURN QUERY

Interesting…not sure this can work as you have no way to know what the caller has specified as the return data type in order to write the inner generic function call correctly.  Maybe you can convert the record result to jsonb and return that?

David J.