2026년 5월 17일 일요일

mssql에서 postgresql로 이관(마이그레이션)처리

postgresql은 강력한 mvcc를 지원하고 엔진과 관리툴이 철저히 분리되어 있다.

이 때문에 하드웨어에 의존적인 순수한 속도와 규율적인 제약을 탈피할 수 있고 

OS종속에서도 벗어날수 있으며 도커 컨테이너에도 자유롭게 올라가고 서버엔진과 

클라이언트를 분리해서 클라이언트쪽에서 관리작업 (백업,복구)을 진행할수 있는등

혁신적인 일이 벌어진다.  (어설픈 스크립트 백업이런거 아님) 또한 실시간 메모리 범위

변동이나 update나 insert시 RAM에서 우선처리하고 응답한후 스토리지에는 지연쓰기를 설정할 수 있는 레디스 db속도급 synchronous_commit = off 기능등 활용범위가 

다양하고 자료형도 그래프관련 자료나 기하학관련 AI에서 쓰이는 자료형이나 

json이나 xml처리등을할 수 있으며 지구상에서 sql표준을 가장 잘 구현하고 표준에 부합하는 

데이터베이스다. 이런 혁신적인 구조 때문에 차세대 db엔진으로 많은 사랑을 받고 있다.

그래서 운영하는 시스템도 mssql에서 postgresql로 마이그레이션을 진행하였다.


먼저 이관 순서는 다음과 같이 진행하여야 한다.  (한PC에서 두커넥션다 존재)


1. 기존 mssql자료에 접근할수 있는 로컬환경구축 (로그인과 알멩이가 같이 있어야함)

2. 새로운 postgresql에 접근할수 있는 로컬환경구축 (로그인과 껍데기 db준비)

3. sling으로  양쪽을 전부 접속해서 마이그레이션하는 명령실행

sling은 리눅스 기반이라 윈도우에서는 wsl을 이용하여 우분투를 설치한후 

명령을 실행하는 방식을 취해야한다.  명령줄은 다음과 같다.  (상세내역 아래참조)


./sling run --src-conn 'sqlserver://아이디:비밀번호@아이피:포트?database=DB명&encrypt=false&TrustServerCertificate=true' --src-stream 'dbo.*' --tgt-conn 'postgresql://아이디:비밀번호@아이피:포트/DB명?sslmode=disable' --tgt-object 'public.{stream_table}'



4. postgresql에 public 스키마로 백업된 데이터를 확인하고 

내 입맛에 맞게 테이블을 alter작업 (이부분이 시간이 가장 많이 걸림.. 뷰나 프로시저도 한번은 거쳐야하므로 이때 이관한다. 복원된 

테이블을 변경하고 인덱스도 다시 잡아줌 등등 sql파일에서 작업해서 처리할것)


5. 입맛대로 변경된 postgresql에서 db를 백업한다. (pg_dump 처리로 파일로 export)


6. 운영할 postgresql이 설치된 서버 pc에서 5번 파일로 restore 작업을 진행한다..




[마이그레이션 유의사항 - 리눅스에서 진행할것]



# 슬라잉(sling-cli) 최신 버전 다운로드 
wget https://github.com/slingdata-io/sling-cli/releases/latest/download/sling_linux_amd64.tar.gz 


# 3. 압축 풀기
tar -xzvf sling_linux_amd64.tar.gz


# 슬라잉을 이용하여 마이그레이션 작업
./sling run --src-conn 'sqlserver://아이디:비밀번호@아이피:포트?database=DB명&encrypt=false&TrustServerCertificate=true' --src-stream 'dbo.*' --tgt-conn 'postgresql://아이디:비밀번호@아이피:포트/DB명?sslmode=disable' --tgt-object 'public.{stream_table}'



댓글 없음:

댓글 쓰기