Skip to content

Instantly share code, notes, and snippets.

@JuanRamino
Created November 10, 2022 15:29
Show Gist options
  • Save JuanRamino/fcdab38786c2155702822e6bcf223d32 to your computer and use it in GitHub Desktop.
Save JuanRamino/fcdab38786c2155702822e6bcf223d32 to your computer and use it in GitHub Desktop.
DO $$
DECLARE sch RECORD;
DECLARE tbl RECORD;
DECLARE seq RECORD;
DECLARE func RECORD;
DECLARE proc RECORD;
BEGIN
EXECUTE format('ALTER DATABASE %I OWNER TO %I', 'dbName', 'user');
FOR sch IN
SELECT nspname FROM pg_catalog.pg_namespace where nspname NOT IN ('pg_toast', 'pg_catalog', 'information_schema')
LOOP
EXECUTE format('ALTER SCHEMA %I OWNER TO %I', sch.nspname, 'user');
FOR tbl IN
SELECT table_name FROM information_schema.tables WHERE table_schema = sch.nspname
UNION
SELECT table_name FROM information_schema.views WHERE table_schema = sch.nspname
LOOP
EXECUTE format('ALTER TABLE %I.%I OWNER TO %I', sch.nspname, tbl.table_name, 'user');
END LOOP;
FOR seq IN
SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = sch.nspname
LOOP
EXECUTE format('ALTER SEQUENCE %I.%I OWNER TO %I', sch.nspname, seq.sequence_name, 'user');
END LOOP;
FOR func IN
SELECT p.oid::regprocedure AS func_name FROM pg_catalog.pg_proc p JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE n.nspname = sch.nspname and p.prokind = 'f'
LOOP
EXECUTE format('ALTER FUNCTION %s OWNER TO %I', func.func_name, 'user');
END LOOP;
FOR proc IN
SELECT p.oid::regprocedure AS pro_name FROM pg_catalog.pg_proc p JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE n.nspname = sch.nspname and p.prokind = 'p'
LOOP
EXECUTE format('ALTER PROCEDURE %s OWNER TO %I', proc.pro_name, 'user');
END LOOP;
END LOOP;
END $$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment