-- drop function if exists public.mascara_cpf_lgpd(TEXT) CREATE OR REPLACE FUNCTION public.mascara_cpf_lgpd(in_cpf TEXT) RETURNS TEXT AS $$ DECLARE clean_cpf TEXT; result TEXT; BEGIN clean_cpf := regexp_replace(in_cpf, '[^0-9]', '', 'g'); IF char_length(clean_cpf) <> 11 THEN RAISE EXCEPTION 'CPF inválido. Deve conter 11 dígitos.'; END IF; result := substring(clean_cpf FROM 1 FOR 3) || '.XXX.XXX-' || substring(clean_cpf FROM 10 FOR 2); RETURN result; END; $$ LANGUAGE plpgsql;