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 owner2
und 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?
--no-owner
wie in der akzeptierten Antwort vorgeschlagen, benötigen Sie möglicherweise auch--no-privileges
. Siehe diese AntwortAntworten:
Sie sollten die
--no-owner
Option verwenden. Dadurch wird nicht mehrpg_restore
versucht, 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
quelle
pg_dump --no-owner
sollte es auch tun--role
ein anderer Besitzer eingestellt wurde, wurde immer noch versucht, den ursprünglichen Besitzer zu verwenden (aber dann habe ich ihn nicht verwendet--no-owner
.