1. Hvis brugeren ved en fejl opretter alle sine objekter med superbruger(postgres), og senere har til hensigt at skifte til en anden bruger, så vil REASSIGN OWNED BY ikke fungere, og det fejler blot som:
postgres=# reassign owned by postgres to user1;
ERROR: cannot reassign ownership of objects owned by role postgres because they are required by the database system
2. Hvis brugeren ønsker at ændre kun ét skema objekter ejerskab.
Enten tilfælde af ændring af objekter, fra "postgres"-bruger til en anden bruger eller blot ændring af kun ét skemaobjekt, skal vi gå gennem hvert objekt ved at indsamle objektdetaljer fra pg_catalog's &information_schema og kalde ALTER TABLE / FUNCTION / AGGREGATE / TYPE osv.
Jeg kunne godt lide teknikken til at justere pg_dump output ved hjælp af OS kommandoer (sed/egrep), fordi den vidste, at pg_dump af natur skriver ALTER .. OWNER TO af hvert objekt (TABELLER / SEKVENSER / VISNINGER / FUNKTIONER / AGGREGATES / TYPES ) i sin output. At gribe disse udsagn fra pg_dump stdout ved at erstatte ny USER/SCHEMANAME med sed og derefter sende disse udsagn tilbage til psql-klienten vil rette tingene, selvom objektet ejes af Postgres-brugeren. Jeg brugte samme tilgang i scriptet og tillod brugeren at videregive NYT BRUGERNAVN og SKEMANAVN, så at erstatte det i ALTER…OWNER TO..-sætningen.
Scriptbrug og output:
sh change_owner.sh -n new_rolename -S schema_name
-bash-4.1$ sh change_owner.sh -n user1 -S public
Summary:
Tables/Sequences/Views : 16
Functions : 43
Aggregates : 1
Type : 2
Du kan downloade scriptet herfra, og der er også README til at hjælpe dig med brugen.