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: