Först , funktionen kräver två parametrar i definitionen, som Richard redan föreslagit, och du uppdaterade din fråga därefter.
Andra , kan du skapa den funktionen med "any"
inmatning med LANGUAGE internal
. Men det betyder inte att du borde göra det.
concat_ws()
är bara STABLE
av en anledning. Bland annat textrepresentationen av date
eller timestamp
beror på inställningarna för språk/datumstil, så resultatet är inte oföränderligt . Index som bygger på detta kan tyst gå sönder. Begränsad till text
input, är det säkert att förklara det IMMUTABLE
.Eftersom du bara behöver text
input (eller varchar
, som har en implicit cast till text
), begränsa det till ditt användningsfall och var säker:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Markera den som PARALLEL SAFE
att inte förstöra parallellismen när man involverar denna funktion. Manualen:
Motstå frestelsen att göra saker som detta immutable_concat_ws('|', now()::text, 'foo')
. Detta skulle återinföra nämnda beroenden i samtalet.
Relaterat: