Postgresql - Datenbank sichern und auf anderem Besitzer wiederherstellen?

83

Ich habe mit diesem Befehl eine Sicherung in einer Datenbank auf einem anderen Server durchgeführt, die eine andere Rolle hat als ich brauche:

pg_dump -Fc db_name -f db_name.dump

Dann habe ich das Backup auf einen anderen Server kopiert, auf dem ich die Datenbank wiederherstellen muss, aber es gibt keinen solchen Eigentümer, der für diese Datenbank verwendet wurde. Angenommen, die Datenbank hat einen Eigentümer owner1, aber auf einem anderen Server habe ich nur einen owner2und ich muss diese Datenbank wiederherstellen und den Eigentümer ändern.

Was ich beim Wiederherstellen auf einem anderen Server getan habe:

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --role=owner2 -d db_name db_name.dump

Aber wenn die Wiederherstellung ausgeführt wird, erhalte ich folgende Fehler:

pg_restore: [archiver (db)] could not execute query: ERROR:  role "owner1" does not exist

Wie kann ich es angeben, damit es den Besitzer wechselt? Oder ist es unmöglich?

Andrius
quelle
1
Abgesehen davon, --no-ownerwie in der akzeptierten Antwort vorgeschlagen, benötigen Sie möglicherweise auch --no-privileges. Siehe diese Antwort
mivk

Antworten:

130

Sie sollten die --no-ownerOption verwenden. Dadurch wird nicht mehr pg_restoreversucht, den Besitz der Objekte auf den ursprünglichen Eigentümer festzulegen. Stattdessen gehören die Objekte dem von angegebenen Benutzer--role

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --no-owner --role=owner2 -d db_name db_name.dump

pg_restore doc

Gary
quelle
14
pg_dump --no-ownersollte es auch tun
Nick Barnes
10
Ich bevorzuge es, diese Art von Entscheidungen bis zur Wiederherstellung aufzuschieben. Wenn Sie dies in der Dump-Phase tun, bedeutet dies, dass Sie Ihre Meinung nicht ändern können, ohne den Export durchzuführen. Wenn Sie dies bei der Wiederherstellung tun, bleiben die Optionen offen, falls Sie entscheiden, dass Sie diese fehlende Rolle wirklich hätten erstellen sollen usw.
Gary
1
Wenn ich also den Besitzer wechseln möchte, muss ich ohne Besitzer sichern? Weil ich dachte, ich könnte beim Wiederherstellen den Besitzer wechseln. Aber selbst wenn --roleein anderer Besitzer eingestellt wurde, wurde immer noch versucht, den ursprünglichen Besitzer zu verwenden (aber dann habe ich ihn nicht verwendet --no-owner.
Andrius
2
@Andrius: Sie müssen Ihr Backup nicht ändern, Garys Antwort sollte Ihr Problem lösen
Nick Barnes
5
Wenn sie alle Beiträge zu diesem Thema durchsehen, scheinen sie auch die Tatsache zu überspringen, dass dieser Ansatz erfordert, dass der neue Rolleninhaber zumindest während der Wiederherstellung ein Superuser ist. Dann funktioniert alles
Chrismarx