/* create a function that will move the sequence */
CREATE FUNCTION public.gen_id() RETURNS character varying LANGUAGE sql IMMUTABLE AS $$ SELECT 'PREFIX_'||nextval('public.my_seq'::regclass)::VARCHAR; $$;
Stating immutable is a lie and the breakage is on your head for violating using only immutable functions in generated expressions.
It's too bad that the server, when it sees the CREATE FUNCTION DDL, can't notice the obvious (to humans) not-immutable nature of the function and throw a warning. It would certainly be hideously complex code, though, and miss lots of cases while throwing some false positive messages.