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: