32

Ich habe Sicherung auf Datenbank auf verschiedene Server und das hat andere Rolle, als ich brauche, mit diesem Befehl:Postgresql - Backup-Datenbank und Wiederherstellung auf anderen Besitzer?

pg_dump -Fc db_name -f db_name.dump 

Dann ich ein Backup auf einem anderen Server kopiert, in dem ich die Datenbank wiederherstellen müssen, aber es gibt keine solche Besitzer, der für diese Datenbank verwendet wurde. Nehmen wir an, die Datenbank hat Besitzer owner1, aber auf einem anderen Server habe ich nur owner2 und ich muss diese Datenbank wiederherstellen und Besitzer ändern.

Was ich auf einem anderen Server hat bei der Wiederherstellung:

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

Aber wiederherstellen, wenn ausgeführt wird, erhalte ich diese Fehler:

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

Wie kann ich es angeben, so würde es Besitzer ändern? Oder ist es unmöglich?

Antwort

47

Sie sollten die Option --no-owner verwenden, dies stoppt pg_restore versucht, die Eigentümerschaft der Objekte auf den ursprünglichen Besitzer festzulegen. Stattdessen werden die Objekte durch die von --role

createdb -p 5433 -T template0 db_name 
pg_restore -p 5433 --no-owner --role=owner2 -d db_name db_name.dump 
angegebenen Benutzer gehört werden

pg_restore doc

+5

'pg_dump --no-owner' sollte auch tun es –

+3

Meine Präferenz diese Art von Entscheidungen, bis die Wiederherstellung zu verschieben ist. Wenn Sie es 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 Optionen offen, falls Sie sich entscheiden, dass Sie diese fehlende Rolle wirklich erstellt haben sollten. – Gary

+0

Also, wenn ich den Besitzer wechseln möchte, muss ich ohne Besitzer sichern? Weil ich dachte, ich könnte den Besitzer beim Wiederherstellen ändern. Aber selbst wenn ich "--role" auf einen anderen Besitzer setzte, versuchte es immer noch den ursprünglichen Besitzer zu benutzen (aber dann habe ich '--no-owner' nicht benutzt. – Andrius

Verwandte Themen