Я сделал резервную копию базы данных на другом сервере, который имеет другую роль, чем мне нужно, с помощью этой команды:
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
Как я могу указать его, чтобы он сменил владельца? Или это невозможно?
--no-owner
что предлагается в принятом ответе, вам также может понадобиться--no-privileges
. Смотрите этот ответОтветы:
Вы должны использовать эту
--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
источник
pg_dump --no-owner
должен также сделать это--role
другого владельца, он все еще пытался использовать первоначального владельца (но тогда я не использовал его--no-owner
.