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: