postgresql : 클러스터의 역할을 덤프하고 복원하는 방법은 무엇입니까?


27

역할은 클러스터에 어디에 저장되며 어떻게 덤프합니까?

db의 pg_dump를 한 다음 다른 클러스터에로드했지만 다음과 같은 오류가 많이 발생합니다.

psql:mydump.sql:3621: ERROR:  role "myrole" does not exist 

따라서 분명히 내 DB 덤프에는 역할이 포함되어 있지 않습니다. 나는 'postgres'db를 덤프하려고 시도했지만 거기에서 역할을 보지 못했습니다.

사용해야 pg_dumpall --roles-only합니까?

PostgreSQL 버전 8.4.8 및 9.1.4 OS : Ubuntu 11.04 Natty

답변:


37

로부터 CREATE ROLE문서 :

역할은 데이터베이스 클러스터 수준에서 정의되므로 클러스터의 모든 데이터베이스에서 유효합니다.

pg_dump단일 데이터베이스를 덤프 하므로 해당 유틸리티로 역할을 추출 할 수 없습니다. pg_dumpall --roles-only당신이 일을 할 것입니다 제안 명령 - 그러나 당신은 단지 원하는 역할이 새 클러스터에 만들 수 있도록 출력을 필터링 할 수도 있습니다.

역할은 pg_authid카탈로그에 저장되며 data/global/다른 클러스터 전체 테이블과 함께 PostgreSQL 설치 의 하위 폴더에 실제로 저장됩니다 . 뷰 를 pg_authid통해 내용을 쿼리 할 수 ​​있습니다 pg_roles.

참고 : 역할을 덤프하려면 수퍼 유저 권한이 필요합니다. 그렇지 않으면, 당신은에 대한 거부 권한 얻을 것 SELECT에를 pg_authid- 그리고 슈퍼 유저가 부여하는 경우에도 SELECT권한을, 같은 오류를 얻을 것입니다. 그러나이 경우, 당신은 쿼리하여 역할을 나열 할 수 있습니다 pg_authid, 직접 COPY파일에하고 필요한 만드는 마법 롤 CREATE ROLEALTER ROLE문을.


모든 역할을 복원하는 방법을 추가 할 수 있습니까 (예 : 필터링 필요 없음)?
Ethan Furman

1
모든 역할을 복원하려면 출력을 복사 pg_dumpall --roles-only하여 원하는 psql 쉘에 붙여 넣으십시오 . 특정 또는 CREATE ROLEALTER ROLE라인
페르난도 Fabreti
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.