pg_dump text 덤프와 복원
pg_dump plain 덤프를 sed로 수정하고 psql로 복구하는 방법.
2024년 5월 1일
pg_dump plain
pg_dump로 plain 덤프 파일을 만들면 직접 편집해야 할 때가 있다.
용량이 너무 큰 경우엔 일반 편집기가 버겁다.
이럴 땐 sed로 수정하는 게 편하다.
복구는 pg_restore가 아니라 psql을 써야 한다.
plain 덤프
pg_dump에서 포맷 옵션으로 plain을 쓰면 된다.
/opt/homebrew/opt/libpq/bin/pg_dump \
-h localhost \
-U {user_name} \
-d {db_name} \
-t public.{table_name} \
-F plain \
-f /Users/bonjugi/test-dump1.sqlsed 사용법
sed 's/dashboard/dashboard_v2/g' origin_dump.sql > edited_dump.sqlsed는 스트림 에디터다.
파일을 통째로 로드하지 않고 스트리밍 방식으로 수정한다.
자세한 사용법은 아래를 참고.
텍스트 치환은 되도록 구체적으로 작성하는 게 좋다.
dashboard처럼 짧은 단어는 사이드 이펙트가 크다.
public.dashboard나 create table dashboard처럼 컨텍스트를 포함해 치환하자.
;로 여러 치환을 묶을 수 있다.
sed 's/public.dashboard/public.dashboard_v2/g; s/create table dashboard/create table dashboard_v2/g' origin_dump.sql > edited_dump.sql잘 수정됐는지 확인할 땐 head를 쓰면 된다.
head -n 300 temp.sqlpsql로 복구
텍스트 포맷 덤프는 pg_restore가 안 된다.
psql로 복구해야 한다.
psql -h {your.host} -U {user_name} -d {db_name} -f edited_dump.sqlcustom 포맷 덤프와 pg_restore
덤프는 -F custom인 것 말고는 동일하다.
/opt/homebrew/opt/libpq/bin/pg_dump \
-h localhost \
-U {user_name} \
-d {db_name} \
-t public.{table_name} \
-F custom \
-f /Users/bonjugi/test-dump1.sql복구는 psql이 아니라 pg_restore로 한다.
plain보다 덤프/복구가 빠르다.
다만 덤프 파일이 바이너리라 테이블명을 직접 수정하기는 어렵다.
sed로 된다고는 하는데 해보진 못했다.