Que fait reviewing-oracle-to-postgres-migration ?
Identifie les risques de migration Oracle vers PostgreSQL en croisant le code avec les différences comportementales connues (chaînes vides, refcursors, coercition de types, tri, horodatages, transactions concurrentes, etc.). Utilisez-le lors de la planification d'une migration de base de données, de la révision des artefacts de migration ou de la validation de la couverture des tests d'intégration des différences Oracle/PostgreSQL.
Pourquoi cette compétence est importante
La migration d'Oracle vers PostgreSQL est un processus complexe avec de nombreuses subtilités qui peuvent entraîner des régressions ou des échecs silencieux. Les différences clés incluent :
- Chaînes vides : Oracle traite les chaînes vides (
'') commeNULL; PostgreSQL les traite comme des chaînes vides. - Refcursors : La gestion des curseurs REF, le vidage et l'itération sont différents.
- Coercition de types : Les conversions de types implicites diffèrent, en particulier entre
NUMBERetINTEGER, ouDATEetTIMESTAMP. - Tri : Le tri insensible à la casse d'Oracle (
NLS_SORT) et l'ordreNULLS FIRST/LASTpar défaut diffèrent. - Horodatages : Précision, fuseaux horaires et gestion des intervalles.
- Transactions concurrentes : Sémantique de verrouillage, contrôle de la concurrence et des niveaux d'isolation.
Utilisation
Cette compétence est utile pour :
- Planifier une migration : Découvrez tôt les risques avant d'investir dans la migration.
- Réviser les artefacts de migration : Les scripts, triggers et procédures stockées convertis peuvent contenir des constructions Oracle.
- Valider les tests d'intégration : Assurez-vous que vos suites de tests incluent des cas couvrant les différences de comportement qui pourraient autrement passer inaperçues.
Comment cela fonctionne
La compétence analyse la base de code à la recherche des modèles suivants :
- Opérateur de concaténation (`||`) avec des chaînes vides
- Utilisation de `SYSDATE` vs `NOW()` ou `CURRENT_TIMESTAMP`
- Clauses `ORDER BY` sans gestion explicite des NULLS
- Fonctions ou syntaxe spécifiques à Oracle (par exemple, `DECODE`, `NVL`, `CONNECT BY`)
Pour chaque modèle détecté, elle délivre :
- Risque : Description concise du problème.
- Impact : Conséquences possibles (par exemple, perte de données, comportement inattendu).
- Recommandation : Correction suggérée ou retour d'informations pour une analyse manuelle.
Exemple
Problème : chaînes vides traitées comme NULL
-- Oracle : 'Hello '' World' → 'Hello World' (les guillemets vides sont ignorés)
SELECT 'Hello ' || '' || 'World' FROM dual;
-- Résultat : 'Hello World'
-- PostgreSQL : 'Hello ' || '' || 'World' → 'Hello World' (identique dans ce cas)
-- Mais si une colonne est vide, Oracle la traite comme NULL, tandis que PostgreSQL utilise une chaîne vide
Recommandation : Utilisez COALESCE(colonne, '') sous PostgreSQL si vous voulez conserver le comportement Oracle.
Plateformes prises en charge
Cette compétence fonctionne avec Claude Code, Cursor, Codex et d'autres assistants IA qui prennent en charge les compétences. Elle est indépendante du langage de programmation : l'analyse se fait au niveau SQL.
Meilleures pratiques
- Utilisez la compétence tôt dans le cycle de migration (faisabilité et planification).
- Passez-la après chaque conversion de lot pour valider les modifications.
- Combinez-la avec des exécutions de tests d'intégration pour une validation complète.
Contribuer
Les contributions sont les bienvenues ! Ouvrez un ticket ou une pull request sur GitHub.