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: