Първо , функцията изисква две параметри в дефиницията, както вече предложи Ричард, и вие съответно актуализирахте въпроса си.
Второ , можете да създадете тази функция с "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') . Това ще въведе отново споменатите зависимости в повикването.
Свързани: