Primeiro , a função requer dois parâmetros na definição, como Richard já sugeriu, e você atualizou sua pergunta de acordo.
Segundo , você pode criar essa função com
"any" entrada usando LANGUAGE internal . Não significa que você deve, no entanto. concat_ws() é apenas STABLE por uma razão. Entre outros, a representação de texto de date ou timestamp depende das configurações de localidade/estilo de data, então o resultado não é imutável . Índices baseados nisso podem quebrar silenciosamente. Restrito a text input, é seguro declará-lo IMMUTABLE .Como você só precisa de text entrada (ou varchar , que tem uma conversão implícita para text ), limite-o ao seu caso de uso e fique seguro:CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Marque-o como
PARALLEL SAFE para não estragar o paralelismo ao envolver esta função. O manual:
Resista à tentação de fazer coisas como esta
immutable_concat_ws('|', now()::text, 'foo') . Isso reintroduziria essas dependências na chamada. Relacionado: