sql >> Base de Datos >  >> RDS >> PostgreSQL

Crea un clon inmutable de concat_ws

Primero , la función requiere dos parámetros en la definición, como Richard ya sugirió, y actualizó su pregunta en consecuencia.

Segundo , puede crear esa función con "any" entrada usando LANGUAGE internal . Sin embargo, no significa que debas hacerlo.

concat_ws() es solo STABLE por una razón. Entre otros, la representación de texto de date o timestamp depende de la configuración de configuración regional/estilo de fecha, por lo que el resultado no es inmutable . Los índices que se basan en esto podrían romperse silenciosamente. Restringido a text input, es seguro declararlo IMMUTABLE .Ya que solo necesitas text entrada (o varchar , que tiene una conversión implícita a text ), limítelo a su caso de uso y esté seguro:

CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;

Márquelo como PARALLEL SAFE para no estropear el paralelismo al involucrar esta función. El manual:

Resista la tentación de hacer cosas como esta immutable_concat_ws('|', now()::text, 'foo') . Esto reintroduciría dichas dependencias en la llamada.

Relacionado: