Proof · Practitioner experience

Commercial Bank: SQL Server → PostgreSQL Migration Program

A national commercial bank's program to move business-critical SQL Server workloads to PostgreSQL — run as a migration factory, not a one-off project.

PRACTITIONER EXPERIENCE — experience informing AnovaCloud's methodology

How to read this: an anonymized account of practitioner experience from 21+ years of enterprise technology work, structured the way we would run it. It is not a client logo and not a claimed AnovaCloud engagement — no client names, no measured figures presented as outcomes. Where a specific number belongs to the engagement and isn't ours to publish, we omit it; the narrative reads complete without invented numbers.

01 · BUSINESS PROBLEM

The licensing treadmill, plus end-of-support risk

The bank ran core transaction-processing workloads on SQL Server across multiple application portfolios. Two pressures converged: enterprise licensing renewals kept repricing a platform the bank didn't strategically need, and aging versions were drifting toward end-of-support — which in banking means either forced upgrades on someone else's schedule or paid extended support with a clock on it.

Leadership didn't want a cheaper database. They wanted optionality: an estate they could evolve on their own cadence, with licensing economics that didn't punish growth. PostgreSQL was the target because the team's workloads — relational, transactional, reporting-adjacent — mapped to it cleanly, and the managed-PostgreSQL market had matured enough for regulated workloads.

02 · INDUSTRY

Anonymized

Industry
A national commercial bank — retail and commercial banking operations.
Anonymization
Client name, brands, and identifying details withheld. The engagement described is practitioner experience; it is presented as experience informing AnovaCloud's methodology, not as an AnovaCloud delivery claim.

03 · SCALE

Orders of magnitude that shaped the design

Workloads
Business-critical, always-on transaction processing plus reporting and operational analytics — the workloads a bank cannot afford to get wrong.
Estate shape
Multiple line-of-business application portfolios, each with its own databases, integrations, and release cadence — a program, not a project.
Recovery bar
Strict recovery expectations: cutovers had to be rehearsed and reversible, because "rollback" is not a strategy in production banking.

04 · CONSTRAINTS

The non-negotiables

  • Zero data loss: every migrated database had to reconcile row-for-row against the source before cutover — sampling was not acceptable for the core portfolios.
  • Cutover windows: dictated by banking hours and change-freeze calendars, not by engineering convenience.
  • Regulatory audit: the migration itself had to be auditable — who converted what, what was tested, who signed off.
  • T-SQL gravity: years of stored procedures, functions, and reporting logic written in T-SQL idioms that don't translate mechanically.
  • Team skills: the operating team's deep expertise was SQL Server; PostgreSQL operations had to be learned during the program, not before it.

05 · BASELINE

What the estate looked like before

SQL Server across several versions and editions, grown organically over years: transactional databases per application, reporting extracts, SQL Agent jobs, SSIS packages, and linked-server integrations that nobody fully mapped. Licensing was managed at renewal time — a periodic negotiation, not a strategy. Monitoring and backup were solid but SQL Server-specific, which meant the operational muscle for PostgreSQL didn't exist yet.

06 · TARGET ARCHITECTURE

The migration factory

Bank SQL Server to PostgreSQL migration program: source estate feeds a migration factory (discovery, assessment, conversion, parallel run) into a PostgreSQL target with rehearsed cutover.Bank SQL Server to PostgreSQL migration program architecture Source estate Migration factory PostgreSQL target SQL Server estatetransactional databases Applications & ETLT-SQL · reports · jobs Dependency mapsapp → database lineage Discovery & inventorycensus · versions · features Compatibility assessmentconversion effort scoring Conversion pipelineschema · T-SQL · test data Replication & parallel runCDC · dual-run comparison PostgreSQL fleetmanaged · HA · backups Observabilitymetrics · slow-query · alerts Cutover gaterehearsed · reversible The factory is the product: discovery, scoring, conversion, and validation as repeatable stages — not heroics per database.

The design treated the migration itself as the system to engineer. A migration factory ran every database through the same stages: discovery and inventory (census, versions, feature usage), compatibility assessment (conversion-effort scoring per object), an automated conversion pipeline (schema, T-SQL, test data), and a replication-plus-parallel-run stage where the PostgreSQL target ran alongside the source under change data capture until dual-run comparison reconciled. Cutover was a rehearsed gate — practiced, timed, reversible — not a leap of faith.

The target was a managed PostgreSQL fleet with high availability, automated backups, and observability (metrics, slow-query analysis, alerting) built from day one — because the operations team was learning PostgreSQL in production, and production is a bad classroom without instrumentation.

07 · KEY DECISIONS

The tradeoffs that mattered

DecisionChosenWhy
Migration modelFactory with waves, not database-by-database projectsOne-off migrations re-learn the same lessons at full price. The factory banks conversion rules, test data, and runbooks so each wave is cheaper than the last.
Target platformManaged PostgreSQLThe team's PostgreSQL ops muscle was nascent; managed HA, backups, and patching removed the steepest part of the learning curve from the critical path.
ReplicationChange data capture with parallel run, not dump-and-restoreDump-and-restore demands long outages. CDC kept cutover windows inside banking change windows and gave a reconciliation story auditors accept.
ValidationRow-for-row dual-run comparison on core portfoliosSampling finds the bugs you look for. Dual-run comparison finds the ones you don't — which is the whole point in banking.
Wave sequencingLowest-risk, highest-learning firstEarly waves were chosen for teachability, not size: simple schemas, cooperative app teams, forgiving cutover windows. The factory earned the right to tackle the hard portfolios.

08 · IMPLEMENTATION

Phased by risk reduction

S1
Discovery. Estate census, version inventory, feature-usage analysis, and dependency mapping — application to database lineage drawn before a single conversion.
S2
Compatibility assessment. Every database scored for conversion effort: T-SQL surface, proprietary features, integration touchpoints. Scores drove wave assignment.
S3
Factory tooling + pilot wave. Conversion pipeline, test-data generation, and runbook templates built against the easiest real databases — tooling proven on production-shaped work, not demos.
S4
Migration waves. Portfolios migrated in scored order; conversion artifacts and lessons banked after every wave.
S5
Rehearsed cutovers. Each cutover practiced end-to-end — including the rollback drill — before the real window.
S6
Decommission. Source instances retired on a schedule with license true-up, so savings were realized, not assumed.

09 · GOVERNANCE

Who decided what

  • A wave review board — application owners, DBAs, security, and program leadership — approved each wave's scope, cutover plan, and rollback criteria.
  • Change control treated migrations as production changes: documented, approved, and scheduled inside the bank's existing process, not around it.
  • Runbooks for every cutover, versioned and rehearsed; sign-off required from application owners before traffic moved.
  • Capability transfer was a tracked deliverable: the bank's engineers operated the factory in later waves, so the methodology stayed when the program ended.

10 · SECURITY

Controls for a regulated estate

  • Encryption in transit and at rest for both the migration pipeline and the target fleet; secrets managed centrally, never in scripts or runbooks.
  • Least-privilege service accounts for replication and conversion tooling — scoped per wave, rotated on schedule.
  • Full audit trail of the migration itself: what was converted, what was tested, who approved the cutover — the evidence a regulator or internal audit would ask for.
  • Target hardening baselines applied before first production data landed, including network segmentation consistent with the bank's existing zones.

11 · CHALLENGES

What was actually hard

  • T-SQL hotspots: a minority of objects — complex procedures, dynamic SQL, proprietary functions — consumed a majority of conversion effort. Scoring them early kept wave plans honest.
  • Application compatibility: some applications assumed SQL Server behaviors (locking semantics, date handling, error codes). These surfaced in parallel run, not in code review — which is why parallel run existed.
  • Stakeholder fatigue: multi-wave programs outlast attention spans. The wave board and a visible decommission schedule kept momentum when the novelty wore off.
  • Rollback readiness: maintaining a credible rollback path through the final waves required discipline — replication lag monitoring, not optimism.

12 · RESULTS

Outcomes, described without invented metrics

  • The migration factory moved from a pilot wave to progressively larger waves as conversion artifacts accumulated — each wave banked reusable conversion rules, test data, and runbooks, so later waves drew on earlier ones instead of starting over.
  • Cutovers ran under rehearsed runbooks with practiced rollback drills; the cutover gate became routine rather than exceptional.
  • The bank's own engineers operated the factory in the later waves — capability transfer was the design goal, and the program was structured so the methodology outlasted it.
  • Source instances were decommissioned on a tracked schedule with license true-up, so the economic case was realized in the estate, not just in the business case.

13 · LESSONS LEARNED

What generalizes

  • The factory is the deliverable. Any single database can be migrated with heroics; a program needs a repeatable machine. Build the machine first, on the easiest real work.
  • Score before you schedule. Compatibility scoring is the difference between a wave plan and a wish. The databases that surprise you are the ones you didn't score.
  • Parallel run is the truth serum. Code review and unit tests catch conversion errors you anticipate; dual-run comparison catches the behaviors applications actually depend on.
  • Rehearse the rollback, not just the cutover. A rollback plan nobody has practiced is a hope. Drills are cheap; production incidents are not.
  • Decommission on a schedule. Migrations that end at cutover leave the old estate — and the old licenses — running. The program isn't done until the source is gone.

14 · RELATED

Pattern, toolkit, service

SQL Server → PostgreSQL pattern

The reference architecture this program's approach follows: assessment, conversion, validation, cutover.

Read pattern →

Migration factory blueprint

The illustrative solution blueprint: modernizing 500 SQL Server databases to PostgreSQL, assumptions stated.

Read blueprint →

SQL Server → PostgreSQL migration guide

The full reference guide: compatibility, conversion, and cutover in detail.

Open the guide →

SQL Server → PostgreSQL pack

Free working documents: compatibility checklist, wave-planning worksheet, cutover runbook template.

Get the pack →

Database modernization assessment

Score your estate's migration complexity, risk, and readiness — free, ungated.

Start the assessment →

Modernization practice

AnovaCloud's modernization services: migrations and legacy renewal, strategy to production.

Explore practice →

Start here

Talk to an Architect

Bring your hardest AI, data, or modernization problem. We'll tell you plainly whether we can help — and what it takes.