Итак, у меня есть простая функция, которая должна добавить значение к существующей перечисляемой «профессии», но вместо работы она показывает ошибку
CREATE FUNCTION add_prof(p text) RETURNS VOID AS $$
BEGIN
ALTER TYPE profession ADD VALUE p;
RETURN;
END;
$$ LANGUAGE plpgsql;
Ошибка "синтаксическая ошибка [42601]". Кстати, DataGrip показывает, что «ожидается строка или ЕСЛИ, но p».
Изменение p на '', конечно, работает нормально, но это не то, что мне нужно.
ALTER
команда является командой DDL, а команды DDL не допускают параметризации (у них нет плана выполнения). Вам нужно использовать динамический SQL:
CREATE FUNCTION add_prof(p text)
RETURNS VOID AS $$
BEGIN
EXECUTE format('ALTER TYPE profession ADD VALUE %L', p);
RETURN;
END;
$$ LANGUAGE plpgsql;