[컴][DB] pg_dump / pg_restore

postgresql / postgres / postgresql 에서 덤프 뜨는 법 / data 를 저장하는 법

pg_dump

table 의 schema 만 dump 를 뜨는 경우(이때 trigger 도 같이 저장된다.)

pg_dump -s -U mytestuser -d mydb > schema.sql

mydb 에 있는 mytab 이라는 table 을 back up

pg_dump -t mytab mydb > db.sql

5개의 worker 를 이용해서 mydb 를 dumpdir 에 dump 할 때, (directory format, -Fd, directory format 으로 할 때만 -j 를 사용할 수 있다.)

pg_dump -Fd -d mydb -j 5 -f dumpdir

5개의 worker 를 이용해서 mydb 의 mytable 을 dumpdir 에 dump 할 때

pg_dump -Fd -d mydb -t mytable -j 5 -f dumpdir

data 만을 dump 하고 싶으면 --data-only 를 추가하자

pg_dump --data-only --t mytable -Fd mydb -j 5 -f dumpdir_dataonly

pg_restore

이미 dump 된 파일이 있을 때 이 dump 된 파일에서 특정 table 의 data 만 추출할 때

pg_restore --data-only --t mytable dumpdir > onetable.pg

5433 port 에 postgres 라는 username 으로 ./dumpdir 에 있는 내용을 mydb 에 restore

pg_restore -d mydb -p 5433 -U postgres -v .\dumpdir

dumpdir 에 dumpfile 이 있는데, 이 dump 파일에서 mytable 의 내용만 가져와서 data.sql 로 저장

pg_restore --data-only -t mytable dumpdir > data.sql

data.sql 을 insert 할 때

psql -p 5433 -d mydb -U postgres < data.sql

owner 주의

restore 를 할 때는 되도록 owner 에 주의하자. db 를 새로 만드는 경우는 괜찮을 듯 한데, 만약 table 하나만 새롭게 restore 하는 경우라면 기존의 다른 db 와 owner 가 같은 계정으로 restore 를 진행하자.

다른 이름의 table 에 넣고 싶을 때

dump 한 내용을 다른 이름의 table 에 넣는 방법에 대해 위의 글에서 설명하는 바는 아래 2가지 이다.

  1. data 만을 plain sql 로 가져와서 psql 를 이용해서 넣는다.
  2. 기존의 table 의 이름을 잠시 변경하고, restore 를 한 후에 다시 table 이름을 변경한다.

See Also

References

  1. PostgreSQL: Documentation: 9.5: pg_dump
  2. PostgreSQL: Documentation: 9.5: pg_restore
  3. Restoring a single table from a Postgres database or backup

댓글 없음:

댓글 쓰기