Re: How to return seto records from seof record function? - Mailing list pgsql-general

From David G. Johnston
Subject Re: How to return seto records from seof record function?
Date
Msg-id CAKFQuwY4BvZWfy=zrDYz4RtsTXUsaMb_ciVdyLnN20T8Kb5+bQ@mail.gmail.com
Whole thread Raw
List pgsql-general
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.
 

pgsql-general by date:

Previous
From: Greg Sabino Mullane
Date:
Subject: Re: Postgres 16 unexpected shutdown
Next
From: Laurenz Albe
Date:
Subject: Re: How to return seto records from seof record function?