PostgreSQL 데이터베이스를 백업 및 복원하기 위해 pg_dump / pg_restore를 사용하고 있지만 pg_restore에서 오류 메시지 (및 0이 아닌 종료 상태)가 나타납니다. 슈퍼 간단한 기본 사례 (아래에 설명)를 시도했지만 여전히 다음 오류가 발생합니다.
pg_restore : [아카이버 (db)] TOC 처리 중 오류 : pg_restore : [아카이버 (db)] TOC 항목 5의 오류; 2615 2200 SCHEMA 공개 postgres pg_restore : [archiver (db)] 쿼리를 실행할 수 없습니다 : ERROR : 스키마 "public"이 이미 있습니다 명령은 다음과 같습니다 : CREATE SCHEMA public;
재현 단계 :
- 신선한 바닐라 우분투 14.04 배포판을 설치하십시오 ( 이 Vagrant 상자 와 함께 Vagrant를 사용하고 있습니다 ).
- PostgreSQL 9.3을 설치하고 Linux 사용자로부터 PostgreSQL 사용자 "postgres"로 로컬 연결을 허용하도록 구성하십시오.
테스트 데이터베이스를 작성하십시오. 나는 단지하고있다 :
vagrant @ vagrant-ubuntu-trusty-64 : ~ $ psql --username = 포스트그레스 postgres psql (9.3.5) 도움말을 보려면 "help"를 입력하십시오. postgres = # 데이터베이스 생성 mydb; 데이터베이스 생성 postgres = # \ q vagrant @ vagrant-ubuntu-trusty-64 : ~ $ psql --username = postgres mydb psql (9.3.5) 도움말을 보려면 "help"를 입력하십시오. mydb = # 테이블 데이터 생성 (entry bigint); 테이블 만들기 mydb = # 데이터 값에 삽입 (1); 삽입 0 1 mydb = # 데이터 값에 삽입 (2); 삽입 0 1 mydb = # 데이터 값에 삽입 (3); 삽입 0 1 mydb = # \ q
다음과 같이 데이터베이스 백업을 작성하십시오.
PGPASSWORD = "postgres"pg_dump --dbname = mydb --username = postgres --format = custom> pg_backup.dump
mydb의 데이터 테이블에서 일부 행을 삭제하면 데이터가 성공적으로 복원되었는지 알 수 있습니다.
다음을 사용하여 데이터베이스를 복원하십시오.
PGPASSWORD = "postgres"pg_restore --clean --create --dbname = postgres --username = postgres pg_backup.dump
데이터는 복원되지만 6 단계의 pg_restore 명령은 상태 1
와 함께 종료되며 다음 출력을 표시합니다.
pg_restore : [아카이버 (db)] TOC 처리 중 오류 : pg_restore : [아카이버 (db)] TOC 항목 5의 오류; 2615 2200 SCHEMA 공개 postgres pg_restore : [archiver (db)] 쿼리를 실행할 수 없습니다 : ERROR : 스키마 "public"이 이미 있습니다 명령은 다음과 같습니다 : CREATE SCHEMA public; 경고 : 복원시 오류가 무시되었습니다. 1
프로그래밍 방식으로이 명령을 실행하고 있으며 종료 상태를 사용하여 복원이 실패했는지 여부를 결정해야하므로이를 무시할 수 없습니다. 처음에이 문제가 데이터베이스를 공개 (기본 스키마)에 두었 기 때문인지 궁금했습니다. 나는 --create
데이터가 복원되기 전에 pg_restore에 의해 옵션 의 결과로 public이 생성 될 것이라고 추론했다. 다른 스키마에서 결과는 동일하고 오류 메시지는 동일합니다.
내가 뭔가 잘못하고 있습니까? 이 오류가 발생하는 이유는 무엇입니까?
--create
없이clean
문제가 해결되지 않습니다.