Skip to content

Instantly share code, notes, and snippets.

@nad2000
Last active July 3, 2025 00:39
Show Gist options
  • Save nad2000/6067f9682d371b142237bb1052b4221e to your computer and use it in GitHub Desktop.
Save nad2000/6067f9682d371b142237bb1052b4221e to your computer and use it in GitHub Desktop.
Obfuscate email addrsses in a clone of a production data base
-- Create email list:
WITH v AS (SELECT
'SELECT ' || C.COLUMN_NAME || ', left(' || C.COLUMN_NAME || ', 1)||left(md5(' || C.COLUMN_NAME || '), 16)||''@mailinator.com'' FROM ' || C.TABLE_NAME || CASE
WHEN (ROW_NUMBER() OVER ()) = 1 THEN ''
ELSE ' UNION '
END AS st
FROM
INFORMATION_SCHEMA.COLUMNS AS C
WHERE
C.COLUMN_NAME ~ 'email'
AND C.DATA_TYPE ~ 'character'
AND C.TABLE_SCHEMA = 'public'
AND C.TABLE_NAME != 'obfuscated_email'
ORDER BY
ROW_NUMBER() OVER () DESC,
C.COLUMN_NAME)
SELECT 'DROP TABLE IF EXISTS obfuscated_email; CREATE TABLE obfuscated_email(email, new_email) AS '
UNION ALL
SELECT st FROM v
UNION ALL
SELECT ';';
-- Obfuscate data:
SELECT
'UPDATE '||C.table_name||' AS t SET '||C.column_name||' = s.new_email FROM obfuscated_email AS s WHERE s.email=t.'||C.column_name||';'
FROM
INFORMATION_SCHEMA.COLUMNS AS C
WHERE
C.COLUMN_NAME ~ 'email'
AND C.DATA_TYPE ~ 'character'
AND C.TABLE_SCHEMA = 'public'
AND C.TABLE_NAME != 'obfuscated_email';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment