Pierwszy , funkcja wymaga dwóch parametry w definicji, jak już zasugerował Richard, i odpowiednio zaktualizowałeś swoje pytanie.
Drugi , możesz utworzyć tę funkcję za pomocą "any" wprowadź za pomocą LANGUAGE internal . Nie oznacza to jednak, że powinieneś.
concat_ws() jest tylko STABLE z powodu. Między innymi tekstowa reprezentacja date lub timestamp zależy od ustawień regionalnych / stylu daty, więc wynik nie jest niezmienny . Indeksy oparte na tym mogą po cichu pękać. Ograniczone do text wejście, można je bezpiecznie zadeklarować IMMUTABLE .Ponieważ potrzebujesz tylko text wejście (lub varchar , który ma niejawne rzutowanie na text ), ogranicz go do swojego przypadku użycia i bądź bezpieczny:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Oznacz go jako PARALLEL SAFE aby nie zepsuć równoległości podczas korzystania z tej funkcji. Podręcznik:
Oprzyj się pokusie robienia rzeczy takich jak ta immutable_concat_ws('|', now()::text, 'foo') . Spowoduje to ponowne wprowadzenie wspomnianych zależności w wywołaniu.
Powiązane: