All skills
github avatar

/reviewing-oracle-to-postgres-migration

@0b950f9 official
by githubgithub/awesome-copilot40k stars
5,040

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.

Use this Skill: https://skilld.dev/gh/github/awesome-copilot/reviewing-oracle-to-postgres-migration

This session only. Nothing lands on disk.

referencesoracle-nvl-decode-functions.md

≈606 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Oracle to PostgreSQL: NVL, DECODE, and Null-Handling Functions

Problem

Oracle provides several functions — NVL, NVL2, DECODE — that have no direct equivalents in standard SQL but are commonly used in Oracle stored procedures and inline SQL. PostgreSQL uses standard SQL alternatives: COALESCE, NULLIF, and CASE expressions.

Behavior Comparison

NVL

Oracle: NVL(expr, replacement) — returns replacement if expr is NULL, otherwise expr.

PostgreSQL: Use COALESCE(expr, replacement) — semantically identical for two arguments.

-- Oracle
NVL(column_name, 'default')

-- PostgreSQL
COALESCE(column_name, 'default')

NVL2

Oracle: NVL2(expr, not_null_val, null_val) — returns not_null_val if expr IS NOT NULL, null_val if NULL.

PostgreSQL: No direct equivalent — use CASE:

-- Oracle
NVL2(column_name, 'has value', 'no value')

-- PostgreSQL
CASE WHEN column_name IS NOT NULL THEN 'has value' ELSE 'no value' END

DECODE

Oracle: DECODE(expr, search1, result1, search2, result2, ..., default) — equality-based switch.

PostgreSQL: No DECODE function — use CASE WHEN:

-- Oracle
DECODE(status, 1, 'Active', 2, 'Inactive', 'Unknown')

-- PostgreSQL
CASE status
  WHEN 1 THEN 'Active'
  WHEN 2 THEN 'Inactive'
  ELSE 'Unknown'
END

Note: DECODE in Oracle treats two NULL values as equal (unlike =). If any search value is NULL, use IS NULL in the CASE equivalent:

-- Oracle: DECODE treats NULL = NULL
DECODE(col, NULL, 'empty', col)

-- PostgreSQL
CASE WHEN col IS NULL THEN 'empty' ELSE col END

Migration Actions

1. Stored Procedures

Apply the direct substitutions above. Pay special attention to:

  • NVL on numeric expressions — COALESCE is type-sensitive in PostgreSQL; ensure both arguments are the same type or cast explicitly.
  • DECODE with NULL search values — replace with IS NULL guard in the CASE expression.

2. Application Code (inline SQL strings)

Search C# string literals and query builders for NVL(, NVL2(, and DECODE(. Apply the same substitutions.

3. Tests

Write test cases that exercise NULL inputs specifically — the Oracle → PostgreSQL translation of NVL/COALESCE is straightforward, but edge cases around NULL equality in DECODE → CASE are a common source of silent behavioral differences.

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    No security issues detected. The skill provides reference documentation and workflows for migrating databases from Oracle to PostgreSQL.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    2/11 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 0b950f9. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 3 months ago

README badge

README badge for github/awesome-copilot/reviewing-oracle-to-postgres-migration

Identifies Oracle-to-PostgreSQL migration risks by cross-referencing code against known behavioral differences in empty strings, refcursors, type coercion, sorting, timestamps, and concurrent transactions. Use this skill when planning a migration, reviewing completed migration work, or validating that integration tests cover the semantic differences between the two databases.

Generated from the current SKILL.md.

What Oracle-to-PostgreSQL differences does this skill cover?
The skill references known behavioral differences including empty strings, refcursors, type coercion, sorting, timestamps, and concurrent transactions. Specific insights are documented in the references/ folder and screened for applicability to your migration scope.
Should I use this for planning or validation?
Both. Use the risk assessment workflow before migration to identify which differences apply to your scope. Use the validation workflow after migration to confirm each applicable difference was addressed and is covered by integration tests.
Does this automatically fix migration code?
No. The skill identifies risks and surfaces reference documentation. You review the references, decide which insights apply, and determine the fix pattern for each applicable difference.
What if a reference insight requires a design decision?
Flag it during the risk assessment step. For example, the empty-string-as-NULL difference may require choosing whether to preserve Oracle semantics or adopt PostgreSQL behavior.

Generated from the current SKILL.md. These answers refresh after source changes.