Eigentümer aller Tabellen ändern

Hallo Forum,

ich habe folgendes Problem:

  1. Ich habe mit pg_dump eine Sicherung meiner Datenbank erstellt.
  2. Diese Sicherung habe ich auf einem anderen Rechner mit pg_restore wiederhergestellt.
    2.1 Ich musste pg_restore mit --no-owner durchführen. Da diese datenbank einen anderen Benutzer hat sonst hat pg_restore nicht geklappt.
    2.2 Das Problem ist nun das alle Tabellen als Eigentümer postgres haben. Der eigentliche Benutzer hat keinen Zugriff auf die Tabellen.

ein

 ALTER TABLE name OWNER

für jede Tabelle würde zu lange dauern. Es sind viele Tabellen vorhanden.

Meine Frage nun:
Wie kann ich den Eigentümer aller Tabellen auf einmal setzen?

Grüsse,
HAKSI

Hilft Dir http://www.archonet.com/pgdocs/grant-all.html weiter?

Andreas

Hallo Andreas,

wo gibt man den Namen der Datenbank an? Ich schaue mir gerade das Shell Skript an???

Gruss,
Haksi

Als Parameter für psql. Du wirst natürlich auch das SQL anpassen müssen.

Andreas

Hallo Andreas,

vielen dank für die Tipps :wink:


Mal eine andere Frage:
Kann ich schon bei pg_restore schon sagen das die angelegten Tabellen den von mir definierten Benutzer gehören sollen und nicht dem der in der Archivdatei definiert ist?

Gruss,
Hakan

Weiß nicht, vielleicht kommst Du mit --no-owner und/oder --use-set-session-authorization zum Ziel. Nie probiert.

Andreas

Hallo,

ich habe es gelöst :smiley:

für alle die sich mit ähnlichem Problem zu tun haben oder haben sollten. Ich habe ein Skript geschrieben das von allen Tabellen den Eigentümer setzt.

#!/bin/ash
mydb=thedbname
myuser=thedbuser
SQL="SELECT relname FROM pg_class WHERE (relkind = 'r' OR relkind = 'S')
AND relname !~ '^pg_' ORDER BY relname"
OBJ=`su - postgres -c "psql -t -c \"$SQL \" $mydb
OBJ=`echo ${OBJ} | sed 's/ /, /g'`

###############################################################
####  Hier werden alle Elemente von $str durchlaufen als
####  Trennzeichen wird "," benutzt                                             
###############################################################
str=$OBJ
while [ "$str" != "$sub" ]; do
    sub=${str/\,*/}
    str=${str/$sub,/}
    SQL="ALTER TABLE $sub OWNER TO $myuser"
    su - postgres -c "psql -c \"$SQL \" $mydb"
done

Viel Spass…
Grüsse,
Haksi

Mir persönlich gefällt gut REASSIGN
REASSIGN OWNED BY old_role [, …] TO new_role;
Hier werden nicht nur die Owner der Tabellen geändert, sonder auch die der Sequenzen und anderen Objekten!