Dev

[IntelliJ / DB] PostgreSQL 데이터베이스(스키마) 백업 및 복원하기

김세진 2023. 10. 31. 11:12
반응형

 

 

 

 

서론

 

 프로젝트를 진행하며 더미 데이터를 검출 후 제거하는 기능이 추가되었고, 이를 테스트할 데이터를 쌓는 일이 필요해졌다. 단, 테스트를 진행하여 데이터를 정제하면 다음 번 테스트를 위해 다시 데이터를 쌓아야 하기 때문에, 스키마를 통째로(데이터 포함) 백업한 뒤 복원하는 것이 좋겠다고 판단했다. 시행착오를 다시 거치지 않기 위해 InteliiJ IDE 환경에서 PostgreSQL의 데이터베이스 및 스키마 백업/복원을 손쉽게 하는 방법을 기술한다.

 

 

개요

 

 테스트를 반복하기 위해 데이터를 백업 및 복원할 때 많은 시간이 소요되면 작업 효율성이 떨어질 수밖에 없다. 따라서 보다 빠르게 백업 및 복원할 수 있는 이진 형식으로 dump 파일을 생성하여 저장하기로 결정했다. 해당 방법으로 복원하기 위해선 psql 이 아닌 pg_restore 명령어로 복원해야 한다. 또한 이진 형식으로 저장하면 적은 용량으로 백업이 가능하다는 이점이 있다.

 단, 텍스트 형식이나 SQL 형식으로 저장한 것과 달리 가독성이 떨어질 수 있고, 텍스트 에디터 등에서 직접 읽거나 수정하기 어려울 수 있다.

 

 

방법

 

1. 백업할 스키마에 마우스 우클릭을 한 뒤 아래와 같은 경로로 dump 파일 생성 창을 띄운다.

 

 

2. Format을 Custom-format archive 로 지정한다. 이는 커맨드라인에 --format=c 옵션을 준 것과 같으며, 데이터가 이진 형식으로 백업되도록 한다. 경로를 적절하게 지정한 뒤, Run 버튼을 클릭한다.

 

 

3. 데이터베이스가 아주 크지 않은 이상 수십 초 내에 백업이 완료되며, pg_dump process finished 라는 로그가 뜨게 된다. 파일 이름은 자동으로 현재 db 이름과 시간이 기록되어 지정했던 경로에 저장된다.

 

 

4. 1번과 같은 경로로 가서 이번엔 Restore with 'pg_restore' 버튼을 클릭하여 복원 창을 띄운다.

 

5. Clean database 옵션을 설정하고 format은 Auto로 지정해준다. 그리고 아까 저장했던 파일을 지정해준다. Clean database 옵션을 설정해 주는 이유는 constraint 키가 있을 경우 데이터가 제대로 복원되지 않을 수 있기 때문이다. 따라서 constraint 키 등 복원에 방해가 될 수 있는 요소들을 제거한 뒤 데이터가 복원될 수 있게 해당 옵션을 지정한다. 물론 데이터가 백업된 뒤 constraint 키도 다시 생성되므로 걱정하지 않아도 된다.

 

 

6. 수 분 내에 pg_restore process finished 라는 로그가 뜨면 복원 성공이다. dump 파일을 생성할 때 보다는 시간이 조금 더 걸린다.

 

 

 

마침

 

 이렇게 postgreSQL 의 스키마를 백업 및 복원해 보았다. 생각보다 쉽게 백업 및 복원이 가능하다. 단, 개발 환경에 따라 차이가 있을 수 있으므로 테스트 스키마를 새로 생성해서 테스트한 뒤 정상 작동하는 것을 확인하고 위 방법을 따르는 것이 안전하겠다.

 

 

 

 

 

 

반응형