- 자체 구축한 데이터베이스(
MySQL
,SQLite
,Oracle
등)를PostgreSQL
로 자동 이관하는 것은 시스템 현대화나 통합 작업에서 매우 중요한 단계입니다. - 이를 효율적으로 수행하기 위해 다양한 도구가 존재하는데, 이 중 pgloader 는 오픈소스이면서도 매우 강력한 기능을 제공하여 주목받고 있습니다.
- 본 글에서는
pgloader
를 중심으로 데이터베이스 자동 이관 방법을 자세히 살펴봅니다.
-
pgloader 는 다양한 데이터베이스를
PostgreSQL
로 이관하는 데 최적화된 오픈소스 도구입니다.- 프로젝트 홈페이지 : https://github.com/dimitri/pgloader
-
Common Lisp
언어로 개발되었으며,PostgreSQL
라이선스를 따르는 자유 소프트웨어입니다. 주요 특징은 다음과 같습니다.- 스키마 변환, 데이터 복사, 데이터 타입 자동 변환을 지원합니다.
- 대규모 데이터에 대해서도 병렬 처리를 통해 빠른 이관이 가능합니다.
- 네트워크 오류 발생 시
Resume
기능을 통해 복구가 가능합니다. - 명령어 기반 또는 스크립트 파일(
.load
) 기반으로 유연하게 이관 작업을 관리할 수 있습니다.
-
단,
pgloader
는PostgreSQL
로만 이관할 수 있으며,PostgreSQL
에서 다른DBMS
로 이관하는 것은 지원하지 않습니다.
-
pgloader가 지원하는 주요 소스는 다음과 같습니다.
-
소스 DBMS 지원 여부 비고 MySQL ✅ 매우 안정적 SQLite ✅ 간단한 파일 기반 이관 가능 MS SQL Server ✅ ODBC 경유 CSV 파일 ✅ 파일 직접 이관 가능 DBF 파일 ✅ 구형 포맷 지원 고정폭 텍스트 파일 ✅ -
Oracle
의 경우, 별도 설명이 필요한데 이는 뒤에서 다루겠습니다.
-
Ubuntu, bash
sudo apt install pgloader
-
macOS, bash
brew install pgloader
-
Windows:
Windows
에서는 공식 지원이 없으므로WSL
또는Docker
를 통해 사용합니다.
-
MySQL
에서PostgreSQL
로 이관하는 기본 명령어는 다음과 같습니다. -
bash
pgloader \ mysql://[mysql_user]:[mysql_password]@[mysql_host]:[mysql_port]/[mysql_dbname] \ postgresql://[pg_user]:[pg_password]@[pg_host]:[pg_port]/[pg_dbname]
-
예시
pgloader \ mysql://root:password@localhost:3306/mydb \ postgresql://postgres:pgpassword@localhost:5432/mydb
-
또는
.load
파일을 작성해 스크립트 기반으로 관리할 수도 있습니다.
- 스키마 변환: 테이블, 컬럼, 데이터 타입 자동 변환
- 데이터 복사: 대용량 데이터 병렬 복사
- 에러 복구: 중단 시 이어서 복구
- 최적화: 데이터 입력 시
COPY
명령어를 사용하여 성능 향상 - 스크립트화: 이관 과정을 코드로 관리 가능
- 데이터 타입 변환 : 예를 들어,
MySQL
의TINYINT(1)
은PostgreSQL
에서는BOOLEAN
으로 변환됩니다. - AUTO_INCREMENT :
PostgreSQL
에서는SERIAL
또는IDENTITY
컬럼으로 변환됩니다. - 인코딩 차이 :
MySQL
은utf8mb4
,PostgreSQL
은UTF8
을 사용합니다. - 트리거, 저장 프로시저 : 기본 이관 대상이 아닙니다. 수작업 변환 필요합니다.
- 외래키 제약조건 : 필요에 따라 이관 시점 조정 가능 (
WITH include drop
옵션 사용 등).
Oracle
데이터베이스를pgloader
로 이관하는 것은 기본적으로 지원되지 않습니다.- 그러나 ODBC 드라이버를 이용한 우회 방법이 존재합니다.
- (1)
Oracle Instant Client
설치 - (2)
Oracle ODBC
드라이버 설치 - (3)
/etc/odbcinst.ini
,/etc/odbc.ini
파일에Oracle DSN
설정 - (4)
pgloader
를ODBC
연결을 통해Oracle
에 접근하여PostgreSQL
로 이관
-
예시:
pgloader \ odbc://oracle_dsn \ postgresql://pguser:pgpassword@localhost/pgdb
-
또는
.load
파일:LOAD DATABASE FROM odbc://oracle_dsn INTO postgresql://pguser:pgpassword@localhost/pgdb WITH include drop, create tables, create indexes, reset sequences SET work_mem to '128MB', maintenance_work_mem to '512 MB';
- NUMBER, CLOB, BLOB 등의 데이터 타입 변환에 주의가 필요합니다.
- 시퀀스와 트리거 변환이 수작업을 요구할 수 있습니다.
- 저장 프로시저(
PL/SQL
)는PostgreSQL
의PL/pgSQL
문법에 맞게 직접 변환해야 합니다. - 대규모 데이터 이관 시:
ODBC
를 통한 속도 저하가 발생할 수 있습니다.
-
Oracle
데이터베이스를PostgreSQL
로 이관할 때는pgloader
대신 ora2pg라는 전문 툴을 사용하는 것이 더 일반적입니다. -
ora2pg
특징:Oracle
스키마를 분석하여PostgreSQL
에 최적화된 스크립트로 변환- 트리거, 저장 프로시저 등도 일부 자동 변환
- 대규모 데이터도 효율적으로 이관 가능
-
설치 예시:
sudo apt install ora2pg
-
ora2pg
를 활용하면 훨씬 안정적으로 Oracle → PostgreSQL 이관이 가능합니다.
- MySQL, SQLite, MS SQL, CSV 파일 등은 pgloader 를 통해 매우 쉽게 PostgreSQL로 이관할 수 있습니다.
- Oracle의 경우, pgloader를 사용하려면 ODBC 설정 이 필요하며, 복잡한 이관은 ora2pg 를 사용하는 것이 더 효과적입니다.
- 이관 시 데이터 타입, 제약조건, 저장 프로시저 등은 주의 깊게 검토하고 테스트하는 것이 매우 중요합니다.
- 데이터베이스 이관은 단순한 복사가 아니라, 대상 시스템(
PostgreSQL
)의 특성에 맞춘 최적화 과정 이 동반되어야 한다는 점을 항상 염두에 두어야 합니다.
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
- 일부 모바일 환경에서는 ❤️ 버튼이 보이지 않습니다.
'DB' 카테고리의 다른 글
SQL 인젝션 (SQL Injection) (0) | 2024.11.21 |
---|---|
SQLite 암호화 방식: OFB 모드와 CCM 모드의 차이점 (1) | 2024.11.14 |
SQLite 암호화 SQLCipher : 특징, 빌드, 적용 가이드 (0) | 2020.01.28 |
DBCLI (0) | 2019.11.05 |
NoSQL 주요 DB 비교: CouchDB와 MongoDB의 차이점과 활용성 (0) | 2011.08.04 |