Wie ändere ich den Besitzer der PostgreSql-Datenbank?

205

Ich muss den Besitzer der PostgreSql-Datenbank ändern.

Wie ändere ich den Besitzer der PostgreSql-Datenbank in phppgadmin?

Jayashri
quelle

Antworten:

345
ALTER DATABASE name OWNER TO new_owner;

Siehe den Eintrag des Postgresql Handbuch auf diese für weitere Details.

Frank Heikens
quelle
3
Der Vollständigkeit halber
a_horse_with_no_name
17
@ mArtinko5MB: Das ist unmöglich, ALTER lässt keine Datenbank fallen.
Frank Heikens
17
@ mArtinko5MB: Auch unmöglich, ALTER TABLE lässt die Tabelle nicht fallen. Zeigen Sie uns Ihre SQL, etwas ist in Ihren Aussagen schlecht gebrochen.
Frank Heikens
18
Beachten Sie, dass alle Tabellen und Sequenzen in der Datenbank weiterhin dem ursprünglichen Eigentümer zugewiesen werden.
Cerin
2
ERROR: must be member of role ...= ARBEITET NICHT MIT RDS
StartupGuy
49

Die Antwort von Frank Heikens aktualisiert nur den Datenbankbesitz. Oft möchten Sie auch den Besitz von enthaltenen Objekten (einschließlich Tabellen) aktualisieren. Ab Postgres 8.2 steht REASSIGN OWNED zur Verfügung, um diese Aufgabe zu vereinfachen.

WICHTIGE BEARBEITUNG!

Verwenden Sie diese Option niemals, REASSIGN OWNEDwenn die ursprüngliche Rolle verwendet wird postgres. Dies kann Ihre gesamte DB-Instanz beschädigen. Der Befehl aktualisiert alle Objekte mit einem neuen Eigentümer, einschließlich der Systemressourcen (postgres0, postgres1 usw.).


Stellen Sie zunächst eine Verbindung zur Admin-Datenbank her und aktualisieren Sie den DB-Besitz:

psql
postgres=# REASSIGN OWNED BY old_name TO new_name;

Dies ist ein globales Äquivalent zu dem ALTER DATABASEin Franks Antwort angegebenen Befehl. Anstatt jedoch eine bestimmte Datenbank zu aktualisieren, wird der Besitz aller DBs geändert, deren Eigentümer 'old_name' ist.

Der nächste Schritt besteht darin, den Besitz der Tabellen für jede Datenbank zu aktualisieren:

psql old_name_db
old_name_db=# REASSIGN OWNED BY old_name TO new_name;

Dies muss für jede Datenbank durchgeführt werden, die 'old_name' gehört. Der Befehl aktualisiert den Besitz aller Tabellen in der Datenbank.

Antwane
quelle
7
Nett! ... es sei denn, der Besitzer postgresselbst ist ... Das hat er auf die harte Tour gelernt.
Chris
1
Das Problem ist, dass der Eigentümer einer einzelnen Datenbank nicht geändert wird, sondern der Eigentümer überall durch die neue ersetzt wird.
Michael003
Das obige REASSIGN OWNED ändert die gesamte Datenbank (wenn mehrere Datenbanken vorhanden sind) in derselben Instanz in die neue Rolle.
varun7447
Eine Alternative zu REASSIGN OWNED(normalerweise, weil Ihr Eigentümer es ist postgres) finden Sie in den Snippets unter stackoverflow.com/a/2686185/1839209 .
Michael Herrmann