PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Crea un clone immutabile di concat_ws

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: