pg_dump는 PostgreSQL에서 제공하는 커맨드라인 도구야. 이걸로 데이터베이스를 백업 파일로 내보낼 수 있어. 이 파일에는 데이터베이스 구조만, 데이터만, 혹은 둘 다 담을 수 있지.
pg_dump의 가장 큰 장점은 서버 간 데이터 이동, 장애 복구, 혹은 장기 보관용 아카이브 만들 때 쓸 수 있다는 거야. 참고로, 이 유틸리티는 데이터베이스 파일을 물리적으로 복사하는 것보다는 SQL 쿼리를 이용한 논리적 백업에 더 적합해.
pg_dump 기본 명령어 문법
pg_dump로 백업을 만들려면 터미널에서 아래 명령어만 치면 돼:
pg_dump -U username -d database_name -f backup_file.sql
명령어 구성 요소를 살펴보자:
-U username— PostgreSQL에 접속할 때 쓸 유저 이름을 지정해.-d database_name— 백업할 데이터베이스 이름을 정해.-f backup_file.sql— 백업 파일을 어디에 저장할지 지정해. 절대 경로나 상대 경로 둘 다 가능해.
예시: university라는 데이터베이스가 있고, university_backup.sql 파일로 백업하고 싶다고 해보자. 명령어는 이렇게 돼:
pg_dump -U postgres -d university -f university_backup.sql
이때 PostgreSQL은 postgres 유저의 비밀번호를 물어볼 거야. 그래야 데이터에 접근할 수 있거든.
꿀팁: 로컬 서버에서 작업하고 매번 비밀번호 치기 귀찮으면 .pgpass 파일을 설정해봐. 자세한 방법은 PostgreSQL 공식 문서를 참고해!
옵션과 활용법
pg_dump는 진짜 유연해서 다양한 옵션으로 백업을 커스터마이즈할 수 있어:
- 데이터베이스 구조만 백업하기
데이터베이스 구조만(예를 들어 새 서버에 배포하려고) 저장하고 싶으면 --schema-only 플래그를 써. 예시:
pg_dump -U postgres -d university --schema-only -f university_schema.sql
이렇게 하면 CREATE TABLE, CREATE INDEX 등 구조만 담긴 SQL 스크립트가 만들어져. 데이터는 없어.
- 데이터만 백업하기
가끔 구조는 필요 없고 데이터만 저장하고 싶을 때가 있지? 그럴 땐 --data-only 플래그를 써:
pg_dump -U postgres -d university --data-only -f university_data.sql
이 파일엔 INSERT INTO 명령어만 들어가서 데이터만 복구할 수 있어.
- 백업 파일 압축하기
백업 파일이 데이터랑 테이블이 많으면 엄청 커질 수 있어. 파일 크기를 줄이려면 --compress 옵션을 써봐:
pg_dump -U postgres -d university -f university_backup.sql --compress=6
압축 레벨은 0(압축 없음)부터 9(최대 압축)까지 숫자로 정할 수 있어. 압축을 많이 할수록 백업 시간이 더 오래 걸릴 수 있다는 점 참고!
- 바이너리 포맷으로 내보내기
더 빠르게 복구하고 싶으면 텍스트 SQL 스크립트 대신 바이너리 포맷으로 백업할 수도 있어:
pg_dump -U postgres -d university -Fc -f university_backup.dump
-Fc 옵션은 Custom 포맷을 의미하고, 이 파일은 pg_restore 유틸리티로 복구할 수 있어.
백업 예시
전체 데이터베이스 백업
company라는 데이터베이스가 있고, 구조랑 데이터 다 포함해서 전체 백업을 만들고 싶다고 해보자:
pg_dump -U postgres -d company -f company_backup.sql
테이블 하나만 백업
데이터베이스에서 특정 테이블만 백업하고 싶으면 -t 옵션을 써:
pg_dump -U postgres -d company -t employees -f employees_backup.sql
이 파일엔 employees 테이블의 구조랑 데이터만 들어가.
여러 테이블 백업
여러 테이블을 백업하려면 -t 옵션을 여러 번 추가하면 돼:
pg_dump -U postgres -d company -t employees -t departments -f selected_tables_backup.sql
압축된 백업
공간을 아끼고 싶으면 --compress 플래그를 쓰거나 바로 압축 포맷으로 파일을 만들어봐:
pg_dump -U postgres -d company -Fc -f company_backup_compressed.dump
유용한 팁
백업 파일 크기 체크하기. 백업 파일이 너무 작으면 뭔가 잘못된 걸 수도 있어. --verbose 옵션을 써서 백업 과정을 자세히 확인해봐.
자동화하기. cron이나 pg_cron을 써서 정기적으로 백업을 만들 수 있어. 오래된 백업을 잘 정리해서 디스크가 꽉 차지 않게 관리하는 것도 잊지 마!
백업 검증하기. 만든 백업 파일이 제대로 되는지 테스트 서버에 복구해보면서 꼭 확인해봐.
마주칠 수 있는 에러들
인증 에러. 유저를 잘못 적었거나 비밀번호를 까먹으면 pg_dump가 에러를 뱉어. .pgpass 파일을 잘 설정해서 자동 인증되게 해봐.
접속 에러. PostgreSQL 서버가 꺼져 있거나 데이터베이스 이름을 잘못 적으면 백업이 안 돼. 데이터베이스 이름이랑 서버 상태를 꼭 확인해.
권한 문제. pg_dump를 실행하는 유저가 구조랑 데이터를 읽을 권한이 있어야 해. 가능하면 관리자 역할을 쓰는 게 좋아.
GO TO FULL VERSION