명령어/DB
[PostgreSQL] pg_dump 단일 DB 백업
jykim23
2026. 7. 30. 22:14
반응형
설치·접속: PostgreSQL 설치와 접속
부제: 하나의 데이터베이스를 SQL이나 압축 아카이브로 떠 낸다
pg_dump shop > shop.sql # 평문 SQL로 백업
pg_dump -Fc shop -f shop.dump # 커스텀(압축) 포맷으로 백업
pg_dump -t users --schema-only shop # users 테이블 구조만
--
-- PostgreSQL database dump
--
-- Dumped from database version 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
-- Dumped by pg_dump version 16.14 (Ubuntu 16.14-0ubuntu0.24.04.1)
SET statement_timeout = 0;
SET client_encoding = 'UTF8';
...
CREATE TABLE public.users (
id integer NOT NULL,pg_dump는 하나의 데이터베이스를 일관된 스냅샷으로 떠 내는 논리 백업 도구다. 실행 중인 서버에서 다른 작업을 막지 않고(온라인) 백업할 수 있다는 게 핵심 장점이다. 포맷은 크게 두 갈래인데, 평문 SQL(.sql)은 psql로 그대로 흘려 넣으면 되고, 커스텀 포맷(-Fc)은 압축·병렬 복원·테이블 선택 복원이 가능해 실무에서 더 많이 쓴다. 위 shop DB는 평문이 약 16KB, 커스텀 포맷이 약 9KB로 압축되었다. 롤·테이블스페이스 같은 클러스터 전역 객체는 담기지 않으니 그건 pg_dumpall --globals-only로 따로 챙긴다.
이렇게도 쓴다
복원이 유연한 커스텀 포맷으로 백업한다. (실무 권장)
pg_dump -Fc -f shop.dump shop
특정 테이블 몇 개만 골라 백업한다.
pg_dump -Fc -t users -t orders shop -f partial.dump
데이터는 빼고 스키마(구조)만 뽑는다. (테스트 DB 틀 만들 때)
pg_dump --schema-only shop > schema.sql
CPU 여러 개로 병렬 백업한다. (디렉토리 포맷 전용, -j)
pg_dump -Fd -j 4 shop -f shop_dir
날짜별 파일로 압축 백업한다. (파이프 조합, cron에 얹기 좋음)
pg_dump shop | gzip > /backup/shop_$(date +%F).sql.gz
한 서버에서 떠서 다른 서버로 바로 밀어 넣는다. (psql 파이프 조합)
pg_dump shop | psql -h newhost -d shop_new
매일 새벽 3시 백업을 cron에 등록한다.
0 3 * * * pg_dump -Fc shop -f /backup/shop_$(date +\%F).dump반응형