티스토리 뷰
mariadb → postgres로 migration 할 일이 생겼다.
migration에 필요한 패키지는 pgloader 이다. pgloader를 설치하여 migration을 진행한다.
pgloader 공식 문서를 보면 linux apt 로 설치하라는 안내가 있어서 windows에서 실행하기 위해
docker image를 활용하여 진행하였다.
✔️ linux 사용자라면 apt-get 으로 설치해서 진행하면 된다!
✔️ 아래에서 진행되는 내용은 docker 를 통해서 진행되지만 pgloader 명령어 부분만 참조하여 동일하게 진행하면 된다!
✔️ mysql도 동일하게 진행하면 된다.
docker image 활용 예제
dimitri/pgloader 도커 이미지를 활용하여 진행한다.
CLI
pgloader 명령어에 인자를 넘겨줘서 수행한다.
# --with 절: 테이블, 컬럼등의 이름에 대소문자 구분을 위해 추가하였다.
# <format>://<userId>:<userPw>@<ip>:<port>/<DB>
docker run --rm -it dimitri/pgloader:latest \
pgloader --with "quote identifiers" \
mysql://rootId:rootPwd@10.3.192.242:3306/SCS \
pgsql://postgresId:rootPwd@10.3.92.91:5432/postgres
생각보다 간단하다. 두개의 DB connection 정보와 옵션정보를 통해서 migration하면 된다.
다양한 옵션도 있으니 공식문서에서 확인하길 바란다.
CLI 관련 인자 정보: https://pgloader.readthedocs.io/en/latest/pgloader.html
⚠️ ‘\’ (multiline command) 가 정상 동작하지 않으면 한 줄로 작성하길 바란다. (git bash에서 동작하지 않음…)
✔️ mariadb도 mysql format을 사용한다.
With load file
load file을 통해서 pgloader 를 실행할 수 있다.
load file을 활용하면 다양한 정보들을 명시적으로 설정하여 관리할 수 있다.
기본 temlplate 정보
mig.load
LOAD database
FROM mysql://root:rootPwd!@10.3.192.2:3306/SCS
INTO postgresql://postgres:postgres1!@10.3.92.3:5432/postgres
WITH quote identifiers, include drop, create tables, no truncate,
create indexes, reset sequences, foreign keys
SET maintenance_work_mem to '128MB', work_mem to '12MB', search_path to 'sakila'
CAST type longtext to jsonb
ALTER SCHEMA 'SCS' RENAME TO 'DMS';
내가 추가로 설정한 부분은 WITH 절에 quote identifiers , CAST type longtext to jsonb, ALTER SCHEMA ~
부분이다. 테이블, 컬럼등의 이름 대소문자 구분, type 변경, Schema 명 변경을 위해 사용하였다.
상세 옵션 정보
https://pgloader.readthedocs.io/en/latest/ref/mysql.html#mysql-database-migration-options-with
이제 해당 파일로 pgloader를 실행하자.
# powershell을 이용하여 volume 바인딩을 하여 mig.load를 참조하게끔 하였음
# -v: volume, -w: working directory
docker run -v $pwd/:/data -w /data --rm -it dimitri/pgloader:latest \
pgloader mig.load
여담
docker 컨테이너로 진행할 때 실수해서 해멨던게 있는데, DB IP로 localhost를 적은 것이다.
docker run --rm -it dimitri/pgloader:latest \
pgloader --with "quote identifiers" \
mysql://rootId:rootPwd@10.3.192.242:3306/SCS \
pgsql://postgresId:rootPwd@localhost:5432/postgres
그런데 왠걸 에러가 나는 것이다. 내 컴퓨터 5432 포트에 분명히 설치되어있는데 말이다...
그런데 생각해보니 도커 컨테이너 내부에서 실행되는 명령어라는 점을 간과 했다. 즉 저 localhost는
컨테이너 ip 주소이다. 😲
참 바보 같은 짓으로 다른게 잘못 됬나 하면서 30분을 날렸는데, 다른 분들은 안그랬으면 좋겠다 😂
'DB' 카테고리의 다른 글
[DB] PK 컬럼 ID Vs Seqeunce (0) | 2024.07.13 |
---|
- Total
- Today
- Yesterday
- postgresql trigger
- rest api 조회 생성 수정 삭제
- rest api crud
- postgresql on update current_timestamp
- epel repo
- express crud
- 오블완
- 외래키 삭제
- 외래키 생성
- epel/x86_64
- 1종 적성검사
- oracle 19c 설치
- 외래키 인덱스 생성 구문 쿼리
- rest api 단건 다건
- component auto import
- 1종 적성검사 과태료
- postgresql 외래키
- postgresql 트리거
- 티스토리챌린지
- vue 전역 컴포넌트 설정
- mariadb 외래키 조회
- unplugin-auto-import
- Oracle Database 19c install
- 1종 적성검사 국가건강검진
- vue 컴포넌트 자동 import
- 강서 운전면허 시험장
- postgresql 수정시간 자동 갱신
- 1종 적성검사 신체검사
- Oracle Database 19C 설치
- 스파르타 코딩클럽
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |