Първо , функцията изисква две параметри в дефиницията, както вече предложи Ричард, и вие съответно актуализирахте въпроса си.
Второ , можете да създадете тази функция с "any"
въвеждане чрез LANGUAGE internal
. Това обаче не означава, че трябва.
concat_ws()
е само STABLE
по причина. Между другото, текстовото представяне на date
или timestamp
зависи от настройките за локал/стил на дата, така че резултатът не е неизменен . Индексите, изградени върху това, могат тихо да се счупят. Ограничено до text
вход, е безопасно да го декларирате за IMMUTABLE
.Тъй като имате нужда само от text
вход (или varchar
, което има имплицитно преобразуване към text
), ограничете го до вашия случай на употреба и бъдете в безопасност:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Маркирайте го като PARALLEL SAFE
за да не развалите паралелизма при включването на тази функция. Ръководството:
Устояйте на изкушението да правите неща като това immutable_concat_ws('|', now()::text, 'foo')
. Това ще въведе отново споменатите зависимости в повикването.
Свързани: