Re: PostgreSQL include directive in plpgsql language PL/pgSQL

From: PALAYRET Jacques <jacques(dot)palayret(at)meteo(dot)fr>
To: Merlin Moncure <mmoncure(at)gmail(dot)com>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: PostgreSQL include directive in plpgsql language PL/pgSQL
Date: 2025-09-08 09:37:13
Message-ID: 890069544.207914575.1757324233380.JavaMail.zimbra@meteo.fr
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hello,
Thanks for your response.

# Currently, I have a function text and a function array with the same body but a distinct type return .
-> Example with the array of text function :
SELECT public.calfxi3s_all_elements_text_array(12345678, '2025-01-01 00:00') ;
calfxi3s_all_elements_text_array
-------------------------------------------------------------------------
{3.2,sonic,"Capteur Vent ultrasonique compact Brand xxx",2,-0.123,0.321}
That gives some parameters : the value of the wind strength (3.2), the kind of sensor (sonic), the model (Capteur ...), the environmment (2), two coefficients (-0.123,0.321)

Then I have several functions using the previous one, for example public.calfxi3s_value() :

CREATE OR REPLACE FUNCTION public.calfxi3s_value(np integer, dt timestamp without time zone)
RETURNS numeric
LANGUAGE sql
STABLE
AS $function$
SELECT (public.calfxi3s_all_elements_text_array(np,dt))[1]::numeric ;
$function$

I can manage with this method, but it shoud be better with a include directive.
Now, it doesn't exist. so I will do in an other way

A+

De: "Merlin Moncure" <mmoncure(at)gmail(dot)com>
À: "PALAYRET Jacques" <jacques(dot)palayret(at)meteo(dot)fr>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Envoyé: Vendredi 5 Septembre 2025 18:21:08
Objet: Re: PostgreSQL include directive in plpgsql language PL/pgSQL

On Fri, Sep 5, 2025 at 7:14 AM PALAYRET Jacques < [ mailto:jacques(dot)palayret(at)meteo(dot)fr | jacques(dot)palayret(at)meteo(dot)fr ] > wrote:

Hello,

In a PL/pgSQL function, there is no command for sharing a common part of the body of several functions, is there?

In my case, I would like a function that returns a numeric value; this value is associated with several other parameters, some numeric and others textual.
It would not be practical for maintenance to have several functions (one function for each given parameter) with much of the code being identical.

Presently, I have a text function with all the parameters in return and a function for each parameter based on the first one (with all the parameters), using substr(), position(), etc.
For me, I think it would be easier (and perhaps faster) to use some kind of #include in the body of all the functions.

Can you provide some examples of what you are trying to accomplish?

There may be some workarounds using immutable functions other tricks, but I'm not 100% sure I have my head around your issue.

merlin

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Alec Cozens 2025-09-08 10:27:31 RE: LWLock SerializableFinishedList
Previous Message Justin 2025-09-05 18:00:09 Re: LWLock SerializableFinishedList