본문 바로가기

SQL

postgresql - pg_dump

postgresql을 사용하는 RDS 접속 참고 링크

 

postgre docker 컨테이너 접속할 때

$ sudo docker exec -it <컨테이너명> /bin/bash    # 컨테이너 접속
$ psql -U postgres    # 컨테이너 안에서 psql 접속

 


AWS RDS에 있는 기존 데이터를 로컬로 가져오려 한다.

가져올 것: RDS에 있는 특정 DB 통째로.

넣으려는 곳: postgresql docker 컨테이너에 있는, 장고 migrate의 결과로 스키마는 있지만 데이터는 없는 DB

 

rds에서 로컬로 특정 DB의 데이터 가져오기. 로컬에서 치는 커맨드이다. 참고 링크

RDS와 로컬의 postgresql 버전이 같지 않으면 에러가 난다.

$ pg_dump -h <rds 주소> -U <postgresql username> -f <만들 sql 파일명> <rds의 database명>

 

데이터를 넣을 DB가 스키마가 이미 있는 DB라 위의 커맨드에다 -c 옵션을 주었다. 참고 링크

$ pg_dump -c -h <rds 주소> -U <postgresql username> -f <만들 sql 파일명> <rds의 database명>

만일 -c 옵션을 주지 않고 스키마가 존재하는 DB에 데이터를 주입하려하면 아래와 같은 에러가 난다.

ERROR:  constraint "ㅇㅇㅇ" for relation "ㅇㅇㅇ" already exists

 

데이터를 주입할 DB에 테스트로 만들어둔 user 데이터가 있었는데, 주입 시도때 아래와 같은 문장이 떴다.

DETAIL:  Key (user_id)=(60) is not present in table "users_user".

있던 걸 지우고 다시 주입 시도를 했더니 잘 들어갔다. 있던 걸 보존하며 넣는 방법은 없을까?

 

위에서 만든 sql 파일을 목적하는 DB에 넣을 때는

1. 컨테이너에 sql 파일을 복사하고 넣기

docker cp 할 때 컨테이너를 특정하며 : 를 빼먹지 않도록 주의하기. 빼먹었더니 Must specify at least one container source 에러가 났다.

참고 링크

 

2. 복사 안 하고 바로 넣기

docker exec -i <컨테이너명> psql -U <postgres username> -d <데이터를 주입할 DB> < <넣을 sql 파일 경로>

참고 링크

 

 

 

 

 

 

앞으로 볼 것

'SQL' 카테고리의 다른 글

스타벅스 음료 데이터 모델링  (0) 2021.01.21