BlogEngineering insights
Deep dives on database migrations, Oracle to PostgreSQL, CDC, and data infrastructure.
PostgreSQL7 min read
Parallel Query in PostgreSQL vs Oracle: What You Gain
In Oracle you often ask for parallelism with a PARALLEL hint; in modern PostgreSQL it's automatic — the planner spins up workers for big scans, joins, and aggregates whenever the cost model says it pays. This guide covers what PostgreSQL parallelizes (parallel seq/index scans, joins, and aggregates), the knobs that control it (max_parallel_workers_per_gather, max_parallel_workers, min_parallel_table_scan_size), why a query might stay serial (small table, writes, parallel-unsafe functions), and parallel B-tree index builds — a real speedup for the post-data step of a migration.
Rakesh Mamidala
Founder & Lead Engineer
PostgreSQL7 min read
Oracle Hints vs PostgreSQL: How to Influence the Planner
Oracle developers override the optimizer with hints — INDEX, LEADING, USE_NL, PARALLEL. The first surprise in PostgreSQL: there are no query hints, by deliberate design. PostgreSQL's philosophy is to fix the planner's inputs, not patch its output. This guide maps each Oracle hint to its PostgreSQL approach: better statistics (ANALYZE, SET STATISTICS, CREATE STATISTICS for column correlations), session-level enable_* flags for diagnosis only, and the pg_hint_plan extension as a genuine last resort.
Rakesh Mamidala
Founder & Lead Engineer
PostgreSQL7 min read
Query Optimization After Migration: The First 30 Days
The data landed and validation passed — then a report that took 2 seconds on Oracle takes 40 on PostgreSQL. This is normal and fixable. PostgreSQL's planner is different and, right after a bulk load, flying blind. This guide is the first-30-days playbook: run ANALYZE on day one (the single highest-leverage action), find the real slow queries with pg_stat_statements, read plans with EXPLAIN (ANALYZE, BUFFERS), tune the cost inputs for SSD (random_page_cost, effective_cache_size, work_mem), and verify your migrated indexes are actually being used.
Rakesh Mamidala
Founder & Lead Engineer
Migration6 min read
Character Set Migration: Oracle to PostgreSQL UTF-8
Character-set migration is the one that passes every row count and then surfaces weeks later as a customer named José showing up as Jos?. The fix is mostly one good decision up front — target PostgreSQL in UTF-8 (it maps cleanly to Oracle AL32UTF8) — plus an honest audit of the BYTE-vs-CHAR trap (Oracle VARCHAR2(n BYTE) holds bytes; PostgreSQL VARCHAR(n) counts characters, so multibyte data can overflow), the US7ASCII landmine (8-bit data stuffed in a 7-bit charset), and why only value-level (Merkle) validation — not row counts — catches a botched transcode.
Rakesh Mamidala
Founder & Lead Engineer
Oracle7 min read
Migrating Oracle Materialized Views to PostgreSQL
An Oracle materialized view's DDL converts cleanly — the trap is keeping it current. Oracle has FAST incremental refresh (via MV logs), REFRESH ON COMMIT, and automatic query rewrite; PostgreSQL has exactly one primitive, REFRESH MATERIALIZED VIEW, which rebuilds the whole thing. This guide maps every Oracle refresh mode to a real PostgreSQL strategy: COMPLETE → scheduled refresh via pg_cron, ON COMMIT → an AFTER trigger, and the honest gap — FAST refresh has no native equivalent (scheduled full refresh, trigger-maintained summary tables, or pg_ivm). Plus the UNIQUE-index prerequisite for REFRESH … CONCURRENTLY and the silent query-rewrite optimization PostgreSQL never performs.
Rakesh Mamidala
Founder & Lead Engineer
Oracle7 min read
Oracle DATE vs PostgreSQL TIMESTAMP: Avoid the Traps
Oracle's DATE type carries a time component down to the second — PostgreSQL's DATE is date-only. Map one straight to the other and every hour, minute, and second is silently dropped while row counts still report success. This guide gives the correct mapping (DATE → TIMESTAMP, TIMESTAMP WITH TIME ZONE → TIMESTAMPTZ), the date-arithmetic trap where Oracle's `d + 1` becomes PostgreSQL's `d + INTERVAL '1 day'`, the SYSDATE / TRUNC / ADD_MONTHS / TO_DATE function swaps, the UTC time-zone model, and why only column-level validation catches a botched DATE mapping.
Rakesh Mamidala
Founder & Lead Engineer
Migration7 min read
Handling Oracle NULLs and Empty Strings in PostgreSQL
The nastiest silent difference in an Oracle→PostgreSQL migration: Oracle treats an empty string '' as NULL, while PostgreSQL treats '' as a real, distinct, non-null value. Row counts match, the migration reports success, and then code relying on IS NULL to catch empty Oracle strings quietly returns wrong answers. This guide shows the difference in action, how to decide the mapping per column (usually: coerce '' → NULL to preserve Oracle semantics), the concatenation and NOT NULL traps that follow, and why only column-level (Merkle) validation — not row counts — catches it.
Rakesh Mamidala
Founder & Lead Engineer
Oracle8 min read
Oracle DB Links vs PostgreSQL FDW: The Migration Path
Oracle database links let a query reach into another database as if its tables were local. PostgreSQL replaces them with Foreign Data Wrappers (FDW) — more explicit, more secure, and able to federate Postgres, Oracle, MySQL and more. This guide covers picking the wrapper (postgres_fdw / oracle_fdw / dblink), the four-step setup that replaces CREATE DATABASE LINK (extension → server → user mapping → foreign table / IMPORT FOREIGN SCHEMA), rewriting @dblink references, and the three things to get right: predicate push-down, credentials in the user mapping, and cross-server writes.
Rakesh Mamidala
Founder & Lead Engineer
Oracle7 min read
Migrating Oracle Synonyms: What PostgreSQL Offers Instead
Synonyms are one of the few Oracle features with no direct PostgreSQL equivalent — there is no CREATE SYNONYM. But once you map each synonym to its intent, almost all of them disappear: schema-qualification convenience becomes a search_path entry, a genuine rename becomes a view or a thin wrapper function, and PUBLIC synonyms become a shared schema on every role's path. This guide gives the intent-to-replacement map, the search_path mechanic that does most of the work, the PUBLIC-synonym pattern, resolution-order gotchas, and the one case that needs a real object.
Rakesh Mamidala
Founder & Lead Engineer
Oracle8 min read
Oracle Triggers in PostgreSQL: Full Migration Guide
Triggers are one of the friendliest parts of an Oracle→PostgreSQL migration — the concepts map almost one-to-one — but one structural difference trips up every first-timer: Oracle inlines the trigger body, while PostgreSQL splits it into a trigger function plus a binding. This guide walks the full translation map (:NEW/:OLD, TG_OP, WHEN, INSTEAD OF), a worked BEFORE-INSERT example, the RETURN NEW rule that silently drops rows when forgotten, firing order without FOLLOWS, the mutating-table pain that simply disappears in PostgreSQL, and the one hard case — autonomous-transaction audit triggers — that genuinely needs a human.
Rakesh Mamidala
Founder & Lead Engineer
Migration9 min read
What a Migration Assessment Report Should Include
A migration assessment report is the artifact that turns “we should move off Oracle” into a plan you can staff and schedule. A good one is specific, numeric, and honest about the hard 5%. Here are the ten sections every assessment report should contain — object inventory, data profile, PL/SQL surface, the hard-construct catalog, dependency map, a risk score, an effort estimate, and the recommended approach — plus the red flags of a useless one.
Rakesh Mamidala
Founder & Lead Engineer
AI10 min read
Migration Copilot: An AI That Runs on Your Machine, Not Someone Else’s Cloud
Most “AI migration assistants” ship your schema — sometimes your data — off to a third-party API. For a regulated database that’s a non-starter. So we built Migration Copilot to run locally: a conversational assistant that drives the migration engine through tools, asks before anything destructive, and needs no API key and no internet. Here’s the architecture, the safety model, and why local-first is the right default for database work.
Rakesh Mamidala
Founder & Lead Engineer
Migration10 min read
How to Estimate Migration Timeline: The Honest Formula
Most migration estimates are wrong in the same direction — they anchor on data size, which is rarely the bottleneck. The honest formula budgets five things: data movement, code conversion, the handful of hard constructs, validation, and application-layer changes. Here's the breakdown, a worked example, and the contingency multiplier nobody likes but everybody needs.
Rakesh Mamidala
Founder & Lead Engineer
Migration11 min read
The 10 Biggest Oracle Migration Mistakes (And How to Avoid Them)
After 500+ migrations, the mistakes that hurt are predictable — and most happen before anyone writes a line of conversion code. Row counts mistaken for validation. NULLs collapsed into empty strings. Sequences that aren't resynced at cutover. Here are the ten that show up most, why each one bites, and the one-line fix for each.
Rakesh Mamidala
Founder & Lead Engineer
Migration10 min read
Building a Migration Risk Matrix: Step by Step
An assessment hands you a list of findings. A risk matrix turns that list into priorities — what to fix first, what to watch, and what's safe to accept. Here's how to build one for an Oracle-to-PostgreSQL migration: the two axes that matter, the standard risk catalog, a scoring method that survives scrutiny, and how to keep it a living document instead of a one-time slide.
Rakesh Mamidala
Founder & Lead Engineer
Migration11 min read
How to Assess Your Oracle Database Before Migration
The highest-leverage hour of any Oracle-to-PostgreSQL migration is spent before you move a single row. A complete assessment — object inventory, data profile, PL/SQL surface area, the handful of genuinely hard constructs, and dependency map — turns cutover surprises into a planned punch list. Here's exactly what to measure, the SQL to measure it, and how to turn the findings into a risk score you can plan against.
Rakesh Mamidala
Founder & Lead Engineer
Migration12 min read
Data Type Mapping: Oracle to PostgreSQL Complete Reference
The reference table you wish your migration tool came with. Every Oracle type, the PostgreSQL equivalent, the precision / length / semantic gotchas, and which mappings are silent-data-loss risks vs which are clean. NUMBER variants, VARCHAR2 BYTE vs CHAR, the Oracle DATE-includes-time trap, LOBs, XMLTYPE, spatial, intervals, ROWID, and a few Oracle-only types with no PostgreSQL equivalent.
Rakesh Mamidala
Founder & Lead Engineer
Engineering10 min read
How DBMigrateAIPro Mathematically Proves Your Data is Correct
Most migration tools tell you 'X rows copied'. We tell you the same — and hand you a cryptographic proof that every column of every row landed exactly right. Per-partition Merkle roots, computed on both sides during COPY, compared in seconds. Verification cost goes from O(N) to O(log N). On a 1B-row table, that's hours → seconds. None of DMS, GoldenGate, Striim, or Fivetran ship this. Here's how it works.
Rakesh Mamidala
Founder & Lead Engineer
Migration11 min read
Oracle Packages in PostgreSQL: How We Solve the Biggest Challenge
Oracle packages are the single hardest construct to migrate to PostgreSQL — there's no direct equivalent. PG has schemas + functions, not packages. But the pattern that works in production is well-understood: one schema per package, package-state via session-local tables or set-returning functions, and PRAGMA AUTONOMOUS_TRANSACTION via dblink. A concrete walkthrough with real before/after code.
Rakesh Mamidala
Founder & Lead Engineer
PostgreSQL8 min read
Oracle Sequences vs PostgreSQL: What Changes and Why
Sequences look identical between Oracle and PostgreSQL — until they aren't. Both have CREATE SEQUENCE, NEXTVAL, CACHE. But the way you call a sequence in a DEFAULT clause differs, IDENTITY columns are the modern replacement for the legacy sequence + trigger pattern, and the post-migration sequence resync is the single most common source of 'primary key already exists' errors at cutover. A practical guide with concrete before / after SQL.
Rakesh Mamidala
Founder & Lead Engineer
Migration10 min read
PL/SQL to PL/pgSQL: The Complete Conversion Guide (Part 1)
Most of PL/SQL maps cleanly to PL/pgSQL — block-structured, cursor-aware, exception-handling syntax all carry across with minor changes. Part 1 walks through the constructs every migration project handles: type mappings, variables, built-in functions, cursors, conditionals, loops, exceptions, and DBMS_OUTPUT. With before/after examples you can paste straight into a transpiler test.
Rakesh Mamidala
Founder & Lead Engineer
PostgreSQL8 min read
5 Signs Your Team is Ready for PostgreSQL
Most teams know whether PostgreSQL is the right next move — but they ask the question too late, after a roadmap commitment or project deadline forces it. Five observable signals from 500+ migrations that your team is ready, plus a readiness scorecard. If 3 match, you should be scoping this quarter.
Rakesh Mamidala
Founder & Lead Engineer
Migration10 min read
What Makes a Database Migration Succeed (Or Fail)
70-80% of database migrations are said to fail or over-run. After 500+ migrations, the patterns are predictable — and they're not what most teams expect. Five failure modes, five success predictors, and where the time actually goes.
Rakesh Mamidala
Founder & Lead Engineer
Engineering11 min read
PostgreSQL vs Oracle: A DBA's Honest Comparison After 20 Years
No marketing pitch — a working DBA's side-by-side look at Oracle and PostgreSQL across performance, cost, tooling, HA, and where each one genuinely wins in 2026.
Rakesh Mamidala
Founder & Lead Engineer
Engineering6 min read
Why We Built DBMigrateAIPro: The Migration Tool We Always Needed
After 20 years and 500+ enterprise database migrations, we got tired of the tools that existed. So we built our own — with AI-powered PL/SQL conversion, zero-downtime CDC cutover, and row-hash validation.
Rakesh Mamidala
Founder & Lead Engineer
Guide18 min read
Oracle to PostgreSQL Migration: A Complete Step-by-Step Guide
Everything you need to migrate from Oracle to PostgreSQL — schema conversion, PL/SQL transpilation, data migration, CDC cutover, and post-migration validation.
Rakesh Mamidala
Founder & Lead Engineer
Engineering14 min read
PL/SQL to PL/pgSQL: What Changes and What Stays the Same
A hands-on guide covering every PL/SQL construct that needs manual or automatic conversion to PL/pgSQL — packages, sequences, cursors, exceptions, and more.
Rakesh Mamidala
Founder & Lead Engineer
Engineering12 min read
Zero-Downtime Database Migrations Using CDC
How Change Data Capture (CDC) enables near-zero-downtime cutover: run Oracle and PostgreSQL in sync for weeks, then flip the switch with seconds of downtime.
Rakesh Mamidala
Founder & Lead Engineer
Best Practices10 min read
The 40-Point Oracle Migration Checklist (Before You Start)
Skip the painful surprises. This pre-migration checklist covers supplemental logging, XMLTYPE, partitioned tables, sequences, circular FKs, and 34 more gotchas.
Rakesh Mamidala
Founder & Lead Engineer
Architecture8 min read
ETL vs ELT in 2026: Which Should You Choose?
The rise of cloud data warehouses changed the ETL vs ELT debate. We break down when each approach makes sense and how to pick the right pattern for your stack.
Rakesh Mamidala
Founder & Lead Engineer
Best Practices10 min read
Why Data Validation Is the Most Underrated Migration Step
Most migration failures aren't schema problems — they're data quality problems discovered too late. Here's how to build a validation layer that catches issues before production.
Rakesh Mamidala
Founder & Lead Engineer