저번 시간에 데이터 베이스 데이터 전체를 백업하고 복원하는 것을 해 보았습니다. 이번 시간에는 dbeaver에서 테이블을 내보내거나 백업을 하고, 다른 데이터베이스에 집어넣거나 복원하는 작업을 해 보도록 하겠습니다.

 


 이런 시나리오를 생각해 보겠습니다. 로그인 한 지 1년이 지난 유저들의 개인 정보를 옮겨야 한다고 해 봅시다. 이 때, 민감한 정보들은 빼고 분리된 데이터 베이스에 옮긴다고 생각해 봅시다. 그런 경우, 휴대폰 번호와 같은 것은 옮겨지면 안 될 겁니다. 암호화를 하던지 해당 필드를 제외하고 보내야 할 것입니다. 이 중 후자의 방법으로 해 봅시다.

 

 사실 이런 건 cron으로 돌려서 application 단에서 하겠지만, 이 글에서는 실습 해 보는 목적으로 진행하겠습니다.

 

 먼저 postgres 데이터베이스에 있는 테이블 c입니다.

 

 id, a, b가 있네요. id는 primary key입니다. 저는 primary key인 id와 a만 다른 db로 옮기겠습니다.

 

 select id, a from c는 테이블 c로부터 id, a만 얻어옵니다.

 

 그리드의 맨 위쪽 정사각형을 오른쪽 버튼을 클릭하면 데이터 추출이 보입니다. 이것을 눌러 보겠습니다.

 

 그러면 여러 Export 옵션들이 보입니다. 저는 여기서 SQL insert 문으로 내보내기를 클릭하겠습니다.

 

 Format settings에서 Exporter settings를 건드릴 겁니다. include generated columns에 체크를 해 주는데요. 이는 id가 자동으로 생성되는 속성을 가지기 때문입니다. 이는 테이블에 있는 컬럼 정보를 확인해 보면 알 수 있습니다.

 

 nextval이 보이는 걸로 보아서는 빼박이지요. 다음에, insert 구문 당 로우 개수는 400으로 설정합니다. 그러면, insert문 한 번 실행될 때 마다 400개의 행씩 추가됩니다.

 

 

 Output은 UTF-8 정도 설정해 주고 다음 단계로 넘어가겠습니다.

 

 그러면 c_202303210032.sql로 결과 파일이 생성됩니다. 이제, fastapi 데이터베이스의 c 테이블에 그대로 옮겨보도록 하겠습니다.

 


 fastapi 데이터베이스에 접속한 다음, SQL 편집기를 엽니다. 다음에, SQL 스크립트 불러오기를 누릅니다.

 

 export 된 sql 파일을 선택합니다. c_202303210033.sql이니 이것을 선택하면 됩니다.

 

이제 두루마리 플레이 버튼을 눌러서 모든 쿼리문을 실행시키면 됩니다.

 

 

 잘 옮겨졌나 확인해 볼까요? id가 13이고 a가 3인 row와 id가 21이고, a가 4인 row가 잘 옮겨졌음을 볼 수 있습니다.