---
name: reviewing-oracle-to-postgres-migration
description: 'Identifies Oracle-to-PostgreSQL migration risks by cross-referencing code against known behavioral differences (empty strings, refcursors, type coercion, sorting/collations, UNION ALL planner risks, materialized-view refresh requirements, timestamps, concurrent transactions, etc.). Use when planning a database migration, reviewing migration artifacts, or validating that integration tests cover Oracle/PostgreSQL differences.'
title: reviewing-oracle-to-postgres-migration
canonical_url: https://skilld.dev/gh/github/awesome-copilot/reviewing-oracle-to-postgres-migration
last_updated: 2026-09-29T12:22:32.000Z
---

> **Skill from skilld.dev.** Follow the instructions below for this session. You do not need to install anything.
>
> Supporting files, fetch one when the Skill refers to it: [references/empty-strings-handling.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/empty-strings-handling.md), [references/no-data-found-exceptions.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/no-data-found-exceptions.md), [references/oracle-nvl-decode-functions.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/oracle-nvl-decode-functions.md), [references/oracle-parentheses-from-clause.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/oracle-parentheses-from-clause.md), [references/oracle-rownum-pagination.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/oracle-rownum-pagination.md), [references/oracle-sysdate-sequences-dual.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/oracle-sysdate-sequences-dual.md), [references/oracle-to-postgres-sorting.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/oracle-to-postgres-sorting.md), [references/oracle-to-postgres-timestamp-timezone.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/oracle-to-postgres-timestamp-timezone.md), [references/oracle-to-postgres-to-char-numeric.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/oracle-to-postgres-to-char-numeric.md), [references/oracle-to-postgres-type-coercion.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/oracle-to-postgres-type-coercion.md), [references/postgres-concurrent-transactions.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/postgres-concurrent-transactions.md), [references/postgres-materialized-view-refresh.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/postgres-materialized-view-refresh.md), [references/postgres-refcursor-handling.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/postgres-refcursor-handling.md), [references/postgres-union-all-planner.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/postgres-union-all-planner.md), [references/REFERENCE.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/REFERENCE.md).
>
> If the user asked to install this Skill, run `npx skilld install github/awesome-copilot/reviewing-oracle-to-postgres-migration`. Install writes the Skill files into the project, so every session loads them.

# Oracle-to-PostgreSQL Database Migration

Surfaces migration risks and validates migration work against known Oracle/PostgreSQL behavioral differences documented in the `references/` folder.

## When to use

1. **Planning** — Before starting migration work on a procedure, trigger, query, or refcursor client. Identify which reference insights apply so risks are addressed up front.
2. **Validating** — After migration work is done, confirm every applicable insight was addressed and integration tests cover the new PostgreSQL semantics.

## Workflow

Determine the task type:

**Planning a migration?** Follow the risk assessment workflow.
**Validating completed work?** Follow the validation workflow.

### Risk assessment workflow (planning)

```
Risk Assessment:
- [ ] Step 1: Identify the migration scope
- [ ] Step 2: Screen each insight for applicability
- [ ] Step 3: Document risks and recommended actions
```

**Step 1: Identify the migration scope**

List the affected database objects (procedures, triggers, queries, views) and the application code that calls them.

**Step 2: Screen each insight for applicability**

Review the reference index in [references/REFERENCE.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/REFERENCE.md). For each entry, determine whether the migration scope contains patterns affected by that insight. Read the full reference file only when the insight is potentially relevant.

**Step 3: Document risks and recommended actions**

For each applicable insight, note the specific risk and the recommended fix pattern from the reference file. Flag any insight that requires a design decision (e.g., whether to preserve Oracle empty-string-as-NULL semantics or adopt PostgreSQL behavior).

### Validation workflow (post-migration)

```
Validation:
- [ ] Step 1: Map the migration artifact
- [ ] Step 2: Cross-check applicable insights
- [ ] Step 3: Verify integration test coverage
- [ ] Step 4: Gate the result
```

**Step 1: Map the migration artifact**

Identify the migrated object and summarize the change set.

**Step 2: Cross-check applicable insights**

For each reference in [references/REFERENCE.md](https://skilld.dev/api/skills-raw/github/awesome-copilot/reviewing-oracle-to-postgres-migration/references/REFERENCE.md), confirm the behavior or test requirement is acknowledged and addressed in the migration work.

**Step 3: Verify integration test coverage**

Confirm tests exercise both the happy path and the failure scenarios highlighted in applicable insights (exceptions, sorting, `UNION ALL` behavior/performance risks, refcursor consumption, concurrent transactions, timestamps, materialized-view freshness, etc.).

**Step 4: Gate the result**

Return a checklist asserting each applicable insight was addressed, migration scripts run, and integration tests pass.
