create or replace function pg_catalog.creditcardmasking(col text,letter char default 'x') RETURNS text AS $$ declare size INTEGER := 4; begin return CASE WHEN pg_catalog.length(col) >= size THEN pg_catalog.REGEXP_REPLACE(pg_catalog.left(col, size*(-1)), '[\d+]', letter, 'g') || pg_catalog.right(col, size) ELSE col end; end; $$ LANGUAGE plpgsql; create or replace function pg_catalog.basicemailmasking(col text, letter char default 'x') RETURNS text AS $$ declare pos INTEGER := position('@' in col); begin return CASE WHEN pos > 1 THEN pg_catalog.repeat(letter, pos - 1) || pg_catalog.substring(col, pos, pg_catalog.length(col) - pos +1) ELSE col end; end; $$ LANGUAGE plpgsql; create or replace function pg_catalog.fullemailmasking(col text, letter char default 'x') RETURNS text AS $$ declare pos INTEGER := position('@' in col); dot_pos INTEGER := pg_catalog.length(col) - position('.' in pg_catalog.reverse(col)) + 1; begin return CASE WHEN pos > 2 and dot_pos > pos THEN pg_catalog.repeat(letter, pos - 1) || '@' || pg_catalog.repeat(letter, dot_pos - pos - 1) || pg_catalog.substring(col, dot_pos, pg_catalog.length(col) - dot_pos +1) ELSE col end; end; $$ LANGUAGE plpgsql; create or replace function pg_catalog.alldigitsmasking(col text, letter char default '0') RETURNS text AS $$ begin return pg_catalog.REGEXP_REPLACE(col, '[\d+]', letter, 'g'); end; $$ LANGUAGE plpgsql; create or replace function pg_catalog.shufflemasking(col text) RETURNS text AS $$ declare index INTEGER := 0; rd INTEGER; size INTEGER := pg_catalog.length(col); tmp text := col; res text := ''; begin while size > 0 loop rd := pg_catalog.floor(pg_catalog.random() * pg_catalog.length(tmp) + 1); res := res || pg_catalog.right(pg_catalog.left(tmp, rd), 1); tmp := pg_catalog.left(tmp, rd - 1) || pg_catalog.right(tmp, pg_catalog.length(tmp) - rd); size := size - 1; END loop; return res; end; $$ LANGUAGE plpgsql; create or replace function pg_catalog.randommasking(col text) RETURNS text AS $$ begin return pg_catalog.left(pg_catalog.MD5(pg_catalog.random()::text), pg_catalog.length(col)); end; $$ LANGUAGE plpgsql; create or replace function pg_catalog.regexpmasking(col text, reg text, replace_text text, pos INTEGER default 0, reg_len INTEGER default -1) RETURNS text AS $$ declare size INTEGER := pg_catalog.length(col); endpos INTEGER; startpos INTEGER; lstr text; rstr text; ltarget text; begin startpos := pos; IF pos < 0 THEN startpos := 0; END IF; IF pos >= size THEN startpos := size; END IF; endpos := reg_len + startpos - 1; IF reg_len < 0 THEN endpos := size - 1; END IF; IF reg_len + startpos >= size THEN endpos := size - 1; END IF; lstr := pg_catalog.left(col, startpos); rstr := pg_catalog.right(col, size - endpos - 1); ltarget := pg_catalog.substring(col, startpos+1, endpos - startpos + 1); ltarget := pg_catalog.REGEXP_REPLACE(ltarget, reg, replace_text, 'g'); return lstr || ltarget || rstr; end; $$ LANGUAGE plpgsql;