티스토리 뷰

어쩌다보니, Postgres DB 를 자주 이전하게 되어 매번 구글링을 해가며 작업을 했으나... 언젠가 찾아 올 다음 이전때는 좀 더 신속히 끝내기 위하여, 약간 시간을 냈다.


DB 를 통으로 Dump 하기
sudo -u postgres pg_dump dbname |gzip > dbname.sql.gz

테이블(들)만 Dump 하기
for table in table1 table2 table3; do echo `sudo -u postgres pg_dump -v dbname -t $table |gzip > dbname_$table.sql.gz`; done


Dump 를 완료했으면, 알아서 이전할 곳으로 전송한 다음...


CASE1. 예전 DB와 새 DB간의 스키마가 전부다 동일하기 때문에 통으로 Dump 를 떠 옮기는 작업이라면...
gunzip -c dbname.sql.gz |psql dbname

CASE2. 새로운 테이블 네임으로 바뀐 테이블에 데이터만 가져가는 경우라면...
gunzip 으로 압축을 풀어주고,
gunzip dbname_old_tablename.sql.gz
perl 을 이용하여 dump 파일 내의 테이블 네임을 치환.
perl -pi -e ’s/원본문자열/바꿀문자열/g’ 대상파일명

[example]
$ perl -pi -e s/old_tablename/new_tablename/g’ dbname_old_tablename.sql
$ mv dbname_old_tablename.sql dbname_new_tablename.sql
그리고 Restore
psql dbname < dbname_new_tablename.sql

CASE3. 동일한 스키마에서 몇몇 테이블의 데이터만 옮기는 경우는, CASE2 에서 치환 단계만 생략.


댓글