Migrer des applications de bases de données PostgreSQL vers une base de données Autonomous AI Database

Vous pouvez migrer des énoncés SQL de PostgreSQL vers Oracle SQL et exécuter les énoncés sur Autonomous AI Database.

Traduire les énoncés PostgreSQL en SQL Oracle

Vous pouvez traduire les énoncés SQL écrits dans PostgreSQL vers Oracle SQL et exécuter les énoncés traduits sur Autonomous AI Database.

Utilisez DBMS_CLOUD_MIGRATION.MIGRATE_SQL pour traduire l'énoncé PostgreSQL en SQL Oracle. Il existe des variantes de procédure et de fonction de DBMS_CLOUD_MIGRATION.MIGRATE_SQL.

Migrer l'énoncé PostgreSQL vers Oracle SQL avec la procédure MIGRATE_SQL

L'exemple suivant accepte l'énoncé SQL écrit dans PostgreSQL en tant qu'entrée, traduit l'énoncé dans Oracle SQL, affecte l'énoncé SQL traduit à output_sql_result et imprime le résultat :

SET SERVEROUTPUT ON
   declare output_sql_result CLOB;
BEGIN
  DBMS_CLOUD_MIGRATION.MIGRATE_SQL(      
    original_sql => 'SELECT e.employee_id, e.last_name, e.salary FROM employees AS e;',
    output_sql   => output_sql_result,
    source_db    => 'POSTGRES');
    DBMS_OUTPUT.PUT_LINE (output_sql_result);
END;        
/

Output
–-------------------------------------------------------------
SELECT e.employee_id, e.last_name, e.salary FROM employees e;

Le paramètre original_sql spécifie l'énoncé PostgreSQL.

Le paramètre output_sql stocke l'énoncé SQL traduit.

Le paramètre source_db spécifie le nom de la base de données PostgreSQL.

Pour plus d'informations, voir MIGRATE_SQL Procédure et fonction.

Migrer l'énoncé PostgreSQL vers Oracle SQL avec la fonction MIGRATE_SQL

L'exemple suivant présente la fonction DBMS_CLOUD_MIGRATION.MIGRATE_SQL dans un énoncé SELECT. L'entrée de la fonction est un énoncé PostgreSQL et la fonction retourne l'énoncé traduit dans Oracle SQL :

SELECT DBMS_CLOUD_MIGRATION.MIGRATE_SQL(
     'CREATE TABLE IF NOT EXISTS cars (brand VARCHAR(255), model VARCHAR(255), year INT)',
     'POSTGRES') AS output FROM DUAL;

OUTPUT
------------------------------------------------------------------------------
create table cars (brand VARCHAR2(255), model VARCHAR2(255), year NUMBER(10);

Pour plus d'informations, voir MIGRATE_SQL Procédure et fonction.

Notes pour l'exécution de DBMS_CLOUD_MIGRATION.MIGRATE_SQL :

Exécuter les énoncés PostgreSQL dans Autonomous AI Database

Vous pouvez traduire et exécuter de manière interactive les énoncés PostgreSQL dans votre base de données d'intelligence artificielle autonome.

Utilisez la procédure ENABLE_TRANSLATION pour activer la traduction en temps réel des énoncés SQL écrits dans PostgreSQL. Après avoir activé la traduction dans une session, les énoncés PostgreSQL sont automatiquement traduits et exécutés en tant qu'énoncés Oracle SQL, et vous pouvez voir les résultats.

Par exemple, après avoir activé la traduction en exécutant ENABLE_TRANSLATION, vous pouvez effectuer de manière interactive les opérations suivantes dans une session :
  • Créez les tables. Par exemple, créez les tables MOVIE et INVENTORY.

  • Insérer les données dans les tables.

  • tables d'interrogation;

  • Effectuez des opérations JOIN sur les tables. Par exemple, vous pouvez effectuer une jointure externe gauche sur des tables.

Pour activer la traduction avec PostgreSQL et exécuter des commandes :

  1. Connectez-vous à votre base de données autonome avec un client SQL.

    Pour plus d'informations, voir Se connecter à Autonomous Database.

    Note

    DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION n'est pas pris en charge dans Database Actions et n'est pas pris en charge avec le service Oracle APEX.
  2. Exécutez DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION pour activer la traduction SQL en temps réel dans votre session.
    BEGIN
     DBMS_CLOUD_MIGRATION.ENABLE_TRANSLATION('POSTGRES');
    END;
    /

    Utilisez l'interrogation suivante pour vérifier la langue de traduction SQL de votre session :

    SELECT SYS_CONTEXT('USERENV','SQL_TRANSLATION_PROFILE_NAME') FROM DUAL;

    Pour plus d'informations, voir ProcédureENABLE_TRANSLATION.

  3. Entrez des énoncés PostgreSQL. Exemple :
    CREATE TABLE movie (film_id int, title varchar(255));
    
    Table MOVIE created.

    Cela traduit et exécute automatiquement l'énoncé PostgreSQL CREATE TABLE.

    Vous pouvez effectuer une vérification à l'aide de la commande DESC. Exemple :
    DESC movie;
    
    Name        Null?     Type          
    -------     -----     ------------- 
    FILM_ID               NUMBER(38)    
    TITLE                 VARCHAR2(255)
    La table MOVIE est créée et les types de données de chacune des colonnes sont automatiquement convertis en types de données Oracle.

    Vous pouvez rencontrer une erreur lors de la conversion si l'énoncé SQL d'entrée n'est pas pris en charge. Pour plus d'informations, voir Limitations pour la migration et la traduction des énoncés PostgreSQL en SQL Oracle.

  4. Insérez des données dans la table MOVIE. Exemple :
    INSERT INTO movie (film_id, title) VALUES (123, 'Tangled');
    
    1 row inserted.
    
    INSERT INTO movie (film_id, title) VALUES (234, 'Frozen');
    
    1 row inserted.

    Vérifiez l'insertion des données en interrogeant la table MOVIE. Exemple :

    SELECT * FROM movie;
    
    FILM_ID  TITLE
    –------- –--------
    123	 Tangled
    234	 Frozen
    
  5. Créez une table INVENTORY :
    CREATE TABLE inventory (film_id int, inventory_id int);
    
    Table INVENTORY created.
    Vous pouvez vérifier cette étape à l'aide de la commande DESC. Exemple :
    DESC inventory;
    
    Name        Null?     Type          
    -------     -----     ------------- 
    FILM_ID               NUMBER(38)    
    INVENTORY_ID          NUMBER(38)
    La table INVENTORY est créée et les types de données de chacune des colonnes sont automatiquement convertis en types de données Oracle.
  6. Insérez des données dans la table INVENTORY. Exemple :
    INSERT INTO inventory(film_id, inventory_id) VALUES (123, 223);
    
    1 row inserted.
    
    INSERT INTO inventory(film_id, inventory_id) VALUES (234, 334);
    
    1 row inserted.

    Vérifiez l'insertion des données en interrogeant INVENTORY. Exemple :

    SELECT * FROM inventory;
    
    FILM_ID  INVENTORY_ID
    –------- –------------
    123	 223
    234	 334
  7. Effectuez une jointure externe gauche sur les tables MOVIE et INVENTORY :
    SELECT m.film_id, m.title, inventory.inventory_id 
        FROM movie AS m LEFT JOIN inventory 
        ON inventory.film_id = m.film_id;
    
      FILM_ID  TITLE       INVENTORY_ID
    ---------- ---------- ------------
           234 Frozen      334
           123 Tangled     223
    

    Cet exemple effectue une opération LEFT OUTER JOIN sur les tables movie et inventory. Le mot clé AS pour les alias de table dans la clause FROM n'est pas pris en charge dans Oracle SQL. L'interrogation est d'abord traduite en SQL Oracle, puis exécutée dans votre session.

  8. Utilisez la procédure DBMS_CLOUD_MIGRATION.DISABLE_TRANSLATION pour désactiver la traduction en temps réel du langage SQL pour votre session.
    BEGIN
     DBMS_CLOUD_MIGRATION.DISABLE_TRANSLATION;
    END;
    /

    Cela renvoie une erreur si la traduction du langage SQL n'est pas activée pour votre session.

    Voir ProcédureDISABLE_TRANSLATION

Vous pouvez interroger la vue V$MAPPED_SQL pour lister les énoncés PostgreSQL traduits et mappés en mémoire aux énoncés SQL Oracle.

Exemple :

SELECT v.* 
    FROM v$mapped_sql v, dba_objects o
    WHERE v.sql_translation_profile_id = o.object_id
        AND o.object_name = 'POSTGRES'
        AND o.object_type = 'TRANSLATION PROFILE';
Pour plus d'informations, voir V$MAPPED_SQL.

Migrer les fichiers PostgreSQL vers Oracle SQL

Vous pouvez migrer un fichier contenant des énoncés PostgreSQL vers un fichier contenant des énoncés Oracle SQL.

La procédure DBMS_CLOUD_MIGRATION.MIGRATE_FILE traduit les énoncés SQL dans un fichier PostgreSQL du service de stockage d'objets et génère un nouveau fichier contenant Oracle SQL.

Vous devez au préalable charger un ou plusieurs fichiers PostgreSQL ayant l'extension .sql dans un emplacement du stockage d'objets. Les exemples suivants utilisent le fichier postgrestest.sql qui est chargé dans le stockage d'objets. Pour plus d'informations, voir Mettre des données dans le stockage d'objets.

Pour migrer des fichiers PostgreSQL vers Oracle SQL :

  1. Connectez-vous à votre instance de base de données Autonomous AI Database.

    Pour plus d'informations, voir Se connecter à Autonomous Database.

  2. Configurez l'accès au stockage d'objets en nuage à l'aide d'un principal de ressource ou en créant un objet de données d'identification.

    Cette étape permet d'accéder au stockage d'objets en nuage où vous placez les fichiers que vous migrez :

  3. Facultativement, vous pouvez lister les fichiers dans le service de stockage d'objets. Exemple :
    VAR function_list CLOB;
    SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS
       (credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files');
    
    OBJECT_NAME
    ---------------------
    postgrestest.sql
    

    Sinon, si vous créez des données d'identification au lieu du principal de ressource, OCI$RESOURCE_PRINCIPAL, spécifiez le nom des données d'identification dans le paramètre credential_name.

    Pour plus d'informations, voir Fonction LIST_OBJECTS.

  4. Exécutez DBMS_CLOUD_MIGRATION.MIGRATE_FILE pour migrer le fichier PostgreSQL vers Oracle SQL :
    BEGIN
     DBMS_CLOUD_MIGRATION.MIGRATE_FILE (
         credential_name => 'OCI$RESOURCE_PRINCIPAL',
         location_uri    => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files/postgrestest.sql',
         source_db       => 'POSTGRES'
        );
    END;
    /

    Le paramètre credential_name spécifie les données d'identification permettant d'accéder à l'URI du service de stockage d'objets en nuage. L'utilisateur qui exécute DBMS_CLOUD_MIGRATION.MIGRATE_FILE doit disposer du privilège EXECUTE pour l'objet de données d'identification utilisé pour accéder à l'URI du service de stockage d'objets. Autrement dit, les données d'identification que vous spécifiez avec le paramètre credential_name. Si vous utilisez des données d'identification au lieu d'un principal de ressource, spécifiez leur nom dans le paramètre credential_name.

    Le paramètre location_uri spécifie l'URI du fichier source. Le format de l'URI dépend du service de stockage d'objets en nuage que vous utilisez. Pour plus d'informations, voir Formats d'URI DBMS_CLOUD.

    Le paramètre source_db spécifie PostgreSQL comme langue de base de données. Utilisez la valeur POSTGRES pour traduire les fichiers PostgreSQL vers Oracle SQL.

    L'exécution de cette commande convertit le fichier PostgreSQL postgrestest.sql en SQL Oracle et génère un nouveau fichier nommé original_filename_oracle.sql.

    Pour cet exemple, l'exécution de DBMS_CLOUD_MIGRATION.MIGRATE_FILE avec le fichier d'entrée postgrestest.sql génère postgrestest_oracle.sql. Après l'étape de traduction, la procédure charge postgrestest_oracle.sql dans le stockage d'objets.

    Facultativement, utilisez le paramètre target_uri pour spécifier l'emplacement où le fichier traduit est chargé. La valeur par défaut de ce paramètre est NULL, ce qui signifie que le fichier traduit est chargé au même emplacement que celui spécifié dans le paramètre location_uri.

    Pour plus d'informations, voir ProcédureMIGRATE_FILE.

  5. Vérifiez que le fichier de sortie a été généré.
    SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS (
        credential_name => 'OCI$RESOURCE_PRINCIPAL', location_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files');
    
    OBJECT_NAME
    ---------------------
    postgrestest.sql
    postgrestest_oracle.sql
    

    Sinon, si vous créez des données d'identification au lieu du principal de ressource, OCI$RESOURCE_PRINCIPAL, spécifiez le nom des données d'identification dans le paramètre credential_name.

    Pour plus d'informations, voir Fonction LIST_OBJECTS.

Exécutez l'interrogation suivante pour voir le contenu du fichier postgrestest_oracle.sql :

SELECT UTL_RAW.CAST_TO_VARCHAR2 (DBMS_CLOUD.GET_OBJECT(
   credential_name => 'OCI$RESOURCE_PRINCIPAL', 
   object_uri => 'https://objectstorage.region.oraclecloud.com/n/namespace/b/bucket/o/files')) 
FROM dual;

UTL_RAW.CAST_TO_VARCHAR2(DBMS_CLOUD.GET_OBJECT(CREDENTIAL_NAME=>'CRED1',OBJECT_U
--------------------------------------------------------------------------------
SELECT f.film_id, f.title, inventory_id
FROM film f LEFT JOIN inventory
ON inventory.film_id = f.film_id;

Sinon, si vous créez des données d'identification au lieu du principal de ressource, OCI$RESOURCE_PRINCIPAL, spécifiez le nom des données d'identification dans le paramètre credential_name.

Pour plus d'informations, voir GET_OBJECT Procédure et fonction.

Limites pour la migration et la traduction des énoncés PostgreSQL en SQL Oracle

Cette section résume les limitations pour la migration des énoncés SQL de PostgreSQL vers Oracle SQL.

La liste suivante d'énoncés PostgreSQL n'est pas prise en charge lors de la migration vers une base de données d'intelligence artificielle autonome :
  • CREATE DOMAIN
  • CREATE EXTENSION
  • CREATE DATABASE
  • CREATE TYPE
  • SET
La liste suivante d'énoncés PostgreSQL est prise en charge avec des restrictions :
  • ALTER TABLE : Seul ALTER TABLE ADD CONSTRAINT est pris en charge lors de la migration vers une base de données d'IA autonome.
  • DELETE : Le mot clé RETURNING * dans l'énoncé DELETE n'est pas pris en charge dans la base de données d'intelligence artificielle autonome. Vous devez remplacer la clause RETURNING * par la clause RETURNING INTO. Par exemple, DELETE FROM tasks WHERE status = 'DONE' RETURNING *;.

    Pour plus d'informations, voir RETURNING INTO Clause.

  • CREATE FUNCTION : Les éléments suivants ne sont pas pris en charge avec CREATE FUNCTION :
    • Le type de retour SETOF, vous devez remplacer SETOF par des types de retour CURSORS ou COLLECTIONS.
    • Clause IMMUTABLE.
    • Déclarations de paramètre dans le format FUNCTION_NAME (DATATYPE, DATATYPE).
  • ALTER FUNCTION : Les arguments de la fonction ALTER FUNCTION, par exemple RENAME TO, OWNER TO, SET SCHEMA, ne sont pas pris en charge.