Za prvé , funkce vyžaduje dva parametry v definici, jak již navrhl Richard, a vy jste podle toho aktualizovali svou otázku.
Za druhé , můžete tuto funkci vytvořit pomocí "any" zadejte pomocí LANGUAGE internal . Neznamená to však, že byste měli.
concat_ws() je pouze STABLE z důvodu. Mimo jiné textová reprezentace date nebo timestamp závisí na nastavení národního prostředí / datestyle, takže výsledek není neměnný . Indexy postavené na tomto by se mohly tiše zlomit. Omezeno na text vstup, je bezpečné jej prohlásit za IMMUTABLE .Protože potřebujete pouze text vstup (nebo varchar , který má implicitní přetypování na text ), omezte jej na váš případ použití a buďte v bezpečí:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Označte jej jako PARALLEL SAFE aby se nezkazila paralelita při zapojení této funkce. Příručka:
Odolejte pokušení dělat věci jako je tato immutable_concat_ws('|', now()::text, 'foo') . To by znovu zavedlo uvedené závislosti ve volání.
Související: