orapgmig
A focused Oracle to PostgreSQL tool that does exactly three things — convert the code, move the data, and keep it in sync — shipped as a single executable. Use one capability or all three.
Three capabilities, à la carte
Each is an independent command. Run only what your migration needs — code conversion, initial load, or live replication.
PL/SQL → PL/pgSQL
- ✓Converts procedures, functions, packages, and triggers
- ✓Automatic idioms: NVL→COALESCE, SYSDATE→NOW(), NUMBER→NUMERIC, ROWNUM→LIMIT
- ✓Assessment report flags what needs human review
orapgmig transpile -i procs.sql -o procs_pg.sqlParallel bulk copy
- ✓Parallel, checkpointed, resumable table copy
- ✓Row-count and optional cryptographic (Merkle) validation
- ✓Captures the Oracle SCN for a clean handoff to CDC
orapgmig migrate --table HR.EMPLOYEES --workers 8 --validateLive replication
- ✓Reads Oracle redo via LogMiner — runs on 19c/21c/23ai
- ✓Applies whole source transactions (no half-applied state)
- ✓Resumes automatically from the initial-load SCN
orapgmig cdc --tables "HR.EMPLOYEES=public.employees"How a migration flows
Convert the code
Transpile Oracle PL/SQL to PostgreSQL PL/pgSQL and get an up-front report of what auto-converts versus what needs a human. Run this alone if code is all you need.
Load the data
Parallel, resumable bulk copy with row-count and optional Merkle verification. The load records the Oracle SCN before it starts so CDC can pick up cleanly afterward.
Replicate changes
CDC tails Oracle redo logs with LogMiner and keeps PostgreSQL in sync, resuming from the SCN the load captured — so there is no gap or duplicate at cutover.
Cut over
Once replication lag is near zero and validation is green, switch the application to PostgreSQL. Every command writes a full log file, so you always have an audit trail.
Why a separate tool
- →Buy only what you need. A team moving Oracle→PostgreSQL shouldn't have to adopt a whole multi-database suite.
- →Single executable. One binary to deploy on the migration host — fewer moving parts, a smaller footprint.
- →Modern Oracle. CDC registers redo logs itself, so it runs on Oracle 19c/21c/23ai without the desupported CONTINUOUS_MINE.
- →Full logging. Every command writes a timestamped log file; CDC keeps a dedicated event log — so problems are diagnosable, not guesswork.
CDC prerequisites
Code migration and initial load need only source and target credentials. Live replication additionally requires:
- →Oracle 11g Release 2 or later (works on 19c / 21c / 23ai — no CONTINUOUS_MINE)
- →ARCHIVELOG mode enabled on the source database
- →Supplemental logging on tracked tables: ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS
- →SELECT on V$LOGMNR_CONTENTS, V$DATABASE, V$LOG, V$LOGFILE, V$ARCHIVED_LOG
- →EXECUTE on DBMS_LOGMNR
- →Network access from the orapgmig host to the Oracle listener (default 1521) and PostgreSQL (default 5432)
orapgmig FAQ
Common questions about the standalone Oracle to PostgreSQL tool.
What is orapgmig?
orapgmig is a focused Oracle to PostgreSQL migration tool from MedaxAI. It does exactly three things — convert Oracle PL/SQL to PostgreSQL PL/pgSQL, perform a high-throughput initial data load, and replicate ongoing changes with CDC — and ships as a single self-contained executable. Each capability works on its own, so you run only what your migration needs.
How is orapgmig different from DBMigrateAIPro?
DBMigrateAIPro is the full multi-database platform. orapgmig is the Oracle→PostgreSQL path packaged as a small standalone tool for teams that only need that one route — fewer moving parts, a single binary, nothing extra to install or manage.
Does orapgmig CDC work on Oracle 19c and later?
Yes. orapgmig reads changes from Oracle redo logs with LogMiner and registers the required log files itself, so it does not depend on CONTINUOUS_MINE, which Oracle desupported in 19c. It targets Oracle 11g through 23ai.
Can I use only the code conversion, or only the data load?
Yes. The three capabilities are independent commands. Run code migration to convert PL/SQL, run the initial load to copy data, or run CDC to replicate changes — in any combination.
How does orapgmig avoid data gaps between the initial load and CDC?
The initial load captures the Oracle SCN before it starts copying. CDC then resumes from exactly that SCN, so every change made during the load is replayed once — no gap and no duplicate at the cutover boundary.
Moving from Oracle to PostgreSQL?
Read the full Oracle to PostgreSQL guide, or talk to us about a proof-of-concept with your own schema.