sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan ændrer man alle objekters ejerskab i et bestemt skema i PostgreSQL?

Nogle få forslag er her (tak), inspirerede mig til at komponere et bash-script til at ændre alle objekters (TABELLER / SEKVENSER / VISNINGER / FUNKTIONER / AGGREGERER / TYPER) ejerskab til et bestemt skema på én gang. Ingen speciel kode inkluderet i et script, jeg valgte dybest set den foreslåede teknik og forenklede implementeringsmetoden via script. Faktisk udfører REASSIGN OWNED BY-kommandoen det meste af arbejdet gnidningsløst, men det ændrer database-dækkende objektejerskab uanset ethvert skema. To eventualiteter, hvor du ikke må bruge REASSIGN OWNED BY:

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.


  1. Hvordan gør man en kolonne unik i SQL?

  2. ERD-notationer i datamodellering

  3. Er COUNT(rowid) hurtigere end COUNT(*)?

  4. Hvad er en ODBC-kompatibel database?