Zrobiłem kopię zapasową bazy danych na innym serwerze i ma inną rolę niż potrzebuję, za pomocą tego polecenia:
pg_dump -Fc db_name -f db_name.dump
Następnie skopiowałem kopię zapasową na inny serwer, na którym muszę przywrócić bazę danych, ale nie ma takiego właściciela, który byłby używany dla tej bazy danych. Powiedzmy, że baza danych ma właściciela owner1
, ale na innym serwerze mam tylko owner2
i muszę 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 po uruchomieniu przywracania otrzymuję następujące błędy:
pg_restore: [archiver (db)] could not execute query: ERROR: role "owner1" does not exist
Jak mogę to określić, aby zmieniło właściciela? Czy to niemożliwe?
--no-owner
jak zasugerowano w zaakceptowanej odpowiedzi, możesz również potrzebować--no-privileges
. Zobacz tę odpowiedźOdpowiedzi:
Powinieneś użyć
--no-owner
opcji, to przestajepg_restore
próbować ustawić własność obiektów na pierwotnego właściciela. Zamiast tego 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
źródło
pg_dump --no-owner
też powinien to zrobić--role
na innego właściciela, nadal próbowało użyć oryginalnego właściciela (ale wtedy nie użyłem--no-owner
.