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-to-postgres-sorting.md

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

Oracle to PostgreSQL Sorting Migration Guide

Purpose: Preserve Oracle-like sorting semantics when moving queries to PostgreSQL.

Key points

  • Oracle and PostgreSQL default collations can differ significantly.
  • Use COLLATE "C" only when you explicitly need Oracle-like binary ordering and no different sort rule is requested.
  • If Oracle uses explicit linguistic ordering (for example NLS_SORT = French), map to an explicit PostgreSQL locale collation instead of forcing "C".

1) Standard SELECT … ORDER BY

Goal: Keep Oracle-style ordering.

Pattern (only when Oracle-compatible binary ordering is required):

SELECT col1
FROM your_table
ORDER BY col1 COLLATE "C";

Notes:

  • Apply COLLATE "C" only to sort expressions that must mimic Oracle binary ordering.
  • Works with ascending/descending and multi-column sorts, e.g. ORDER BY col1 COLLATE "C", col2 COLLATE "C" DESC.

1b) Locale-aware ordering (when Oracle used NLS_SORT)

If Oracle used locale-specific sorting such as:

ORDER BY nlssort(Externalusers.UserID, 'NLS_SORT = French')

map to an explicit PostgreSQL collation, for example:

ORDER BY Externalusers.UserID COLLATE "ca_FR.utf-8"

Use a collation that exists in the target environment. Discover available collations with:

SELECT collname, collprovider, collcollate, collctype
FROM pg_collation
ORDER BY collname;

2) SELECT DISTINCT … ORDER BY

Issue: PostgreSQL enforces that ORDER BY expressions appear in the SELECT list for DISTINCT, raising: Npgsql.PostgresException: 42P10: for SELECT DISTINCT, ORDER BY expressions must appear in select list

Oracle difference: Oracle allowed ordering by expressions not projected when using DISTINCT.

Recommended pattern (wrap and sort):

SELECT *
FROM (
  SELECT DISTINCT col1, col2
  FROM your_table
) AS distinct_results
ORDER BY col2 COLLATE "C";

Why:

  • The inner query performs the DISTINCT projection.
  • The outer query safely orders the result set and adds an explicit collation where needed to align with Oracle sorting.

Tips:

  • Ensure any columns used in the outer ORDER BY are included in the inner projection.
  • For multi-column sorts, collate each relevant expression: ORDER BY col2 COLLATE "C", col3 COLLATE "C" DESC.

Validation checklist

  • Applied explicit collation only where required ("C" for Oracle-style binary ordering, locale collation for linguistic ordering).
  • For DISTINCT queries, wrapped the projection and sorted in the outer query.
  • Confirmed ordered columns are present in the inner projection.
  • Re-ran tests or representative queries to verify ordering matches Oracle outputs.

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.