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í: