Postgresql-데이터베이스 백업 및 다른 소유자로 복원?


88

다른 서버의 데이터베이스에서 백업을 수행했으며이 명령을 사용하여 필요한 역할과 다른 역할을합니다.

pg_dump -Fc db_name -f db_name.dump

그런 다음 데이터베이스를 복원해야하는 다른 서버에 백업을 복사했지만 해당 데이터베이스에 사용 된 소유자가 없습니다. 데이터베이스에 owner 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 문서


14
pg_dump --no-owner또한 그것을해야
닉 반스에게

11
내가 선호하는 것은 복원 할 때까지 이러한 종류의 결정을 연기하는 것입니다. 덤프 단계에서 수행하면 내보내기 없이는 마음을 바꿀 수 없습니다. 복원시 수행한다는 것은 누락 된 역할 등을 실제로 생성해야한다고 결정한 경우 옵션이 열려 있음을 의미합니다.
Gary

1
그렇다면 소유자를 변경하려면 소유자없이 백업해야합니까? 복원 할 때 소유자를 변경할 수 있다고 생각했기 때문입니다. 그러나 심지어 설정 --role다른 소유자에 여전히 원래 소유자를 사용하려고했다 (하지만 내가 사용하지 않았다 --no-owner.
안드리

2
@Andrius은 : 당신은 게리의 답변이 문제 해결해야 백업을 변경할 필요가 없습니다
닉 반즈

5
이 주제에 대한 모든 게시물을 살펴보면,이 접근 방식을 사용하려면 적어도 복원 중에는 새 역할 소유자가 수퍼 유저 여야한다는 사실을 건너 뛰는 것 같습니다. 그런 다음 모든 작업
chrismarx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.