pg_dump text 덤프와 복원

Bonjugi·2024년 5월 1일
0

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.sql

sed 사용법

sed 's/dashboard/dashboard_v2/g' origin_dump.sql > edited_dump.sql

sed 는 스트림 에디터로, 한번에 파일을 로드하는게 아니라 스트리밍 형식으로 수정할수 있다.
자세한 사용법은 아래를 참고할수 있다.

알고 있겠지만 텍스트 치환은 되도록 구체적으로 작성하는게 좋다.
단순히 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.sql

psql 을 이용한 복구

텍스트 포맷의 덤프파일은 pg_restore가 안된다.
psql 을 이용해야한다.

psql -h {your.host} -U {user name} -d {db name} -f edited_dump.sql

custom 포맷 덤프와 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 로 된다고 하는데 해보진 못함.

0개의 댓글