Eerste , de functie vereist twee parameters in de definitie, zoals Richard al suggereerde, en je hebt je vraag dienovereenkomstig aangepast.
Tweede , kunt u die functie maken met "any"
invoer met behulp van LANGUAGE internal
. Betekent echter niet dat u dat zou moeten doen.
concat_ws()
is slechts STABLE
voor een reden. Onder andere de tekstweergave van date
of timestamp
hangt af van locale / datestyle instellingen, dus het resultaat is niet onveranderlijk . Indexen die hierop voortbouwen, kunnen stilletjes breken. Beperkt tot text
invoer, is het veilig om het IMMUTABLE
te verklaren .Omdat je alleen text
nodig hebt invoer (of varchar
, die een impliciete cast heeft naar text
), beperk het tot uw gebruik en wees veilig:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Markeer het als PARALLEL SAFE
om het parallellisme niet te bederven bij het betrekken van deze functie. De handleiding:
Weersta de verleiding om dit soort dingen te doen immutable_concat_ws('|', now()::text, 'foo')
. Dit zou de afhankelijkheden in de oproep opnieuw introduceren.
Gerelateerd: