32

я сделал резервную копию на базы данных на другом сервере и имеет другую роль, чем мне нужно, с помощью этой команды:Postgresql - резервная база данных и восстановление на разных владельцев?

pg_dump -Fc db_name -f db_name.dump 

Затем я скопировал резервную копию на другой сервер, где мне нужно, чтобы восстановить базу данных, но нет таких владелец, который использовался для этой базы данных. Пусть говорят, что база данных имеет владельца owner1, но на другом сервере у меня есть только owner2, и мне нужно восстановить эту базу данных и сменить владельца.

То, что я сделал на другом сервере при восстановлении:

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

Но когда восстановление выполняется я получаю эти ошибки:

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

Как я могу указать это так, это изменило бы владелец? Или это невозможно?

ответ

47

Вы должны использовать опцию --no-owner, это останавливает pg_restore, пытаясь установить право собственности на объекты на первоначального владельца. Вместо того, чтобы объекты будут принадлежать пользователю, указанный --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' должны также сделать это –

+3

Я предпочитаю, чтобы отложить эти рода решения до момента восстановления. Если вы сделаете это на стадии сброса, значит, вы не можете изменить свое мнение, не делая экспорт. Выполнение этого при восстановлении означает, что параметры остаются открытыми, если вы решите, что действительно хотите создать эту пропущенную роль и т. Д. – Gary

+0

Итак, если я хочу изменить владельца, я должен сделать резервную копию без владельца? Потому что я думал, что смогу изменить владельца при восстановлении. Но даже установив '--role' на другого владельца, он все еще пытался использовать оригинального владельца (но тогда я не использовал' -no-owner'. – Andrius