2015-07-17 16 views
32

zrobiłem kopię zapasową na bazy danych na inny serwer i że ma inną rolę niż muszę, z tym poleceniem:Postgresql - tworzenie kopii zapasowych i przywracanie danych na różnych właścicieli?

pg_dump -Fc db_name -f db_name.dump 

Potem skopiowane kopii zapasowej na innym serwerze, gdy trzeba przywrócić bazę danych, ale nie ma takiego właściciela, który był używany dla tej bazy danych. Załóżmy, że baza danych ma właściciela owner1, ale na innym serwerze mam tylko owner2 i potrzebuję przywrócić tę bazę danych i zmienić właściciela.

Co zrobiłem na innym serwerze podczas przywracania:

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

Ale kiedy przywrócić prowadzony jest uzyskać te błędy:

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

Jak mogę określić ją tak by to zmienić właściciela? Czy to niemożliwe?

Odpowiedz

47

Należy użyć opcji --no-owner, która zatrzyma próbę ustawienia własności obiektów na oryginalnego właściciela. Zamiast obiekty będą własnością użytkownika określonego przez --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

+5

'pg_dump --no-owner' należy również zrobić to –

+3

skłaniam się odroczyć ten rodzaj decyzji do czasu przywrócenia. Jeśli zrobisz to na etapie zrzutu, oznacza to, że nie możesz zmienić zdania, nie robiąc eksportu. Robienie tego podczas przywracania oznacza, że ​​opcje pozostaną otwarte, jeśli zdecydujesz, że naprawdę powinieneś utworzyć tę brakującą rolę. – Gary

+0

Więc jeśli chcę zmienić właściciela, muszę wykonać kopię zapasową bez właściciela? Ponieważ myślałem, że mogę zmienić właściciela podczas przywracania. Ale nawet ustawienie '--role' na innym właścicielu, nadal próbowało użyć oryginalnego właściciela (ale wtedy nie użyłem' --no-owner'. – Andrius

Powiązane problemy