Oracle to PostgreSQL Migration with Phased Cutover
An anonymized database migration focused on Oracle compatibility, parallel operation and phased application cutover to PostgreSQL on Amazon RDS.
[Overview] The migration decision
This anonymized Ampity engagement involved an Oracle-backed healthcare application moving to PostgreSQL on Amazon RDS. The migration scope combined schema and business-logic compatibility, parallel database operation and a phased application cutover.
Continuity of claims processing was a migration requirement. This case explains the approach, not a measured availability, performance or savings result. No downtime duration, data-loss result or compliance certification is asserted here.
[Context] Why a database change affected the application
Oracle-specific SQL and stored procedures contained application behavior. Moving records alone would not establish that the PostgreSQL-backed application produced the same business results. The migration therefore had to consider query semantics, type conversion, stored-procedure behavior and the application's database-access paths together.
The decision was not simply which database to run. It was how to move application responsibilities without treating a successful data copy as a successful application migration.
[Decisions] Parallel operation before application cutover
The migration approach combined a dual-write strategy, an incremental shift of reads toward PostgreSQL, synchronization and schema translation. Application writes and change replay are different mechanisms: an implementation must define which path owns each target mutation. The deployment-level ordering and reconciliation configuration is outside this case's scope.
Keeping both systems available creates a comparison opportunity, but it also adds failure paths. A write can succeed in one database and fail in the other. A response from each database can differ because of conversion rules or different snapshot times. Those differences need explicit ownership rather than an assumption that parallel operation guarantees consistency.
[Approach] Work described
The migration sequence included PostgreSQL schema preparation, stored-procedure adaptation, data synchronization, parallel application operation and progressive traffic cutover. Query comparison and performance validation formed part of the approach. Detailed test runs and numerical results are not published here.
These phases address different questions: can the target represent the data, can it preserve required application behavior, and can the application safely use it? Passing one question does not answer the others.
[Boundaries] Cutover and recovery ownership
For a similar migration, define the authoritative writer at every phase. Reconcile failed or delayed writes before advancing traffic. Compare business-level results as well as row counts, and keep an audit trail of differences and their disposition.
Routing requests back is not, by itself, a rollback. Recovery also depends on whether the previous system contains the writes accepted after cutover and whether the application can safely resume against it. Establish the reversal boundary and test it before treating rollback as available. These are review conditions, not additional tests attributed to this engagement.
[Results] Scope retained without an unsupported benchmark
The delivered scope covered Oracle-to-PostgreSQL compatibility work, parallel operation and phased cutover. This is not a measured licensing-cost or query-performance benchmark. A fair licensing comparison needs the actual contracts and operating-cost boundary; a performance comparison needs a representative workload and observation window.
[Applicability] When this approach deserves review
Phased migration can be useful when application behavior is deeply coupled to the source database and a single cutover concentrates too much risk. Suitability depends on transaction semantics, change rate, dependency coverage, source and target capabilities, and the team's ability to reconcile differences. There is no universal write-volume threshold that establishes readiness.