Prima , la funzione richiede due parametri nella definizione, come già suggerito da Richard, e hai aggiornato la tua domanda di conseguenza.
Secondo , puoi creare quella funzione con "any"
inserire utilizzando LANGUAGE internal
. Non significa che dovresti, però.
concat_ws()
è solo STABLE
per una ragione. Tra le altre, la rappresentazione testuale di date
o timestamp
dipende dalle impostazioni locali/datastyle, quindi il risultato non è immutabile . Gli indici basati su questo potrebbero rompersi silenziosamente. Limitato a text
input, è sicuro dichiararlo IMMUTABLE
.Dato che hai solo bisogno di text
input (o varchar
, che ha un cast implicito in text
), limitalo al tuo caso d'uso e stai al sicuro:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Contrassegnalo come PARALLEL SAFE
per non rovinare il parallelismo quando si coinvolge questa funzione. Il manuale:
Resisti alla tentazione di fare cose come questa immutable_concat_ws('|', now()::text, 'foo')
. Ciò reintrodurrebbe le suddette dipendenze nella chiamata.
Correlati: