Я пытаюсь создать функцию, которая принимает текстовый параметр и массив текстовых параметров, который по умолчанию равен пустому массиву, когда второй параметр не передается.
Затем я хочу заменить любые слова в текстовый параметр, который также появляется в массиве текста, который будет удален. Если этот массив пуст, я не хочу ничего удалять.
Пока у меня есть это:
create or replace function remove_words(name text, words_to_remove text[] default '{}'::text[]) returns text as
$$
select regexp_replace(name,(select '(' || string_agg(r,'|') || ')' from unnest(words_to_remove) r),'','gi');
$$ language sql immutable parallel safe;
В минуту, если я вызову функцию с обоими параметрами, похоже, он работает как ожидалось:
select remove_words('red orange blue green', '{black, brown, green, orange}');
remove_words
---------------
red blue
Однако, если я не пропущу второй параметр, возвращаемый текст будет пустым, в отличие от исходного значения:
select remove_words('red orange blue green');
remove_words
---------------
Кто-нибудь может посоветовать, как мне это сделать?