Postgresql - резервне копіювання бази даних та відновлення для іншого власника?


88

Я зробив резервне копіювання бази даних на іншому сервері, і ця роль має іншу роль, ніж мені потрібно, за допомогою цієї команди:

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

Як я можу вказати це, щоб воно змінило власника? Або це неможливо?


1
Крім того, --no-ownerяк пропонується у прийнятій відповіді, вам може знадобитися --no-privileges. Дивіться цю відповідь
mivk

Відповіді:


134

Вам слід скористатися --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


14
pg_dump --no-ownerтакож повинен це зробити
Нік Барнс,

11
Я вважаю за краще відкласти такі рішення до відновлення. Якщо ви робите це на етапі звалища, це означає, що ви не можете передумати, не роблячи експорту. Робити це під час відновлення означає, що опції залишаються відкритими, якщо ви вирішите, що вам дійсно слід було створити цю відсутню роль тощо
Гері,

1
Отже, якщо я хочу змінити власника, я повинен зробити резервну копію без власника? Тому що я думав, що можу змінити власника під час відновлення. Але навіть налаштувавши --roleіншого власника, він все ще намагався використовувати оригінального власника (але тоді я не використовував --no-owner.
Андріус,

2
@Andrius: Вам не потрібно міняти резервну копію, відповідь Гері повинна вирішити вашу проблему
Нік Барнс,

5
Переглядаючи всі дописи на цю тему, вони також, схоже, пропускають той факт, що такий підхід вимагає, щоб новий власник ролі був суперкористувачем, принаймні на час відновлення. Тоді все працює
chrismarx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.