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: