

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Chargez des fichiers BLOB dans TEXT en utilisant le codage de fichiers compatible avec Aurora PostgreSQL
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible"></a>

*Bhanu Ganesh Gudivada et Jeevan Shetty, Amazon Web Services*

## Résumé
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-summary"></a>

Au cours de la migration, il arrive souvent que vous deviez traiter des données structurées et non structurées chargées à partir de fichiers sur un système de fichiers local. Les données peuvent également se trouver dans un jeu de caractères différent de celui de la base de données.

Ces fichiers contiennent les types de données suivants :
+ **Métadonnées** : ces données décrivent la structure du fichier.
+ **Données semi-structurées** : il s'agit de chaînes textuelles dans un format spécifique, tel que JSON ou XML. Vous pouvez peut-être faire des assertions à propos de ces données, par exemple « commencera toujours par « < » ou « ne contient aucun caractère de nouvelle ligne ».
+ **Texte intégral** — Ces données contiennent généralement tous les types de caractères, y compris les caractères de nouvelle ligne et les guillemets. Il peut également être composé de caractères multi-octets en UTF-8.
+ **Données binaires : ces** données peuvent contenir des octets ou des combinaisons d'octets, y compris des valeurs nulles et des end-of-file marqueurs.

Le chargement d'une combinaison de ces types de données peut s'avérer difficile.

Le modèle peut être utilisé avec les bases de données Oracle sur site, les bases de données Oracle qui se trouvent sur des instances Amazon Elastic Compute Cloud (Amazon EC2) sur le cloud Amazon Web Services (AWS) et Amazon Relational Database Service (Amazon RDS) pour les bases de données Oracle. Par exemple, ce modèle utilise Amazon Aurora PostgreSQL Compatible Edition.

Dans Oracle Database, à l'aide d'un pointeur `BFILE` (fichier binaire), du `DBMS_LOB` package et des fonctions du système Oracle, vous pouvez charger un fichier et le convertir en CLOB avec un codage de caractères. PostgreSQL ne prenant pas en charge le type de données BLOB lors de la migration vers une base de données Amazon Aurora PostgreSQL Edition compatible, ces fonctions doivent être converties en scripts compatibles avec PostgreSQL.

Ce modèle propose deux approches pour charger un fichier dans une seule colonne de base de données d'une base de données compatible avec Amazon Aurora PostgreSQL :
+ Approche 1 — Vous importez des données depuis votre compartiment Amazon Simple Storage Service (Amazon S3) en utilisant `table_import_from_s3` la fonction de l'extension avec `aws_s3` l'option d'encodage.
+ Approche 2 — Vous encodez en hexadécimal à l'extérieur de la base de données, puis vous le décodez pour afficher à `TEXT` l'intérieur de la base de données.

Nous vous recommandons d'utiliser Approach 1 car la compatibilité avec Aurora PostgreSQL est directement intégrée à l'extension. `aws_s3`

Ce modèle utilise l'exemple du chargement d'un fichier plat contenant un modèle d'e-mail, comportant des caractères multi-octets et un formatage distinct, dans une base de données compatible avec Amazon Aurora PostgreSQL.

## Conditions préalables et limitations
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-prereqs"></a>

**Conditions préalables**
+ Un compte AWS actif
+ Une instance Amazon RDS ou une instance compatible avec Aurora PostgreSQL
+ Compréhension de base du SQL et du système de gestion de base de données relationnelle (RDBMS)
+ Un bucket Amazon Simple Storage Service (Amazon S3).
+ Connaissance des fonctions système dans Oracle et PostgreSQL
+ Package RPM HexDump -XXD-0.1.1 (inclus avec Amazon Linux 2)
**Note**  
Le support d'Amazon Linux 2 touche à sa fin. Pour plus d'informations, consultez [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).

**Limites**
+ Pour le type de `TEXT` données, la plus longue chaîne de caractères pouvant être stockée est d'environ 1 Go.

**Versions du produit**
+ Aurora prend en charge les versions de PostgreSQL répertoriées dans les mises à jour d'[Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html) PostgreSQL.

## Architecture
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-architecture"></a>

**Pile technologique cible**
+ Compatible avec Aurora avec PostgreSQL

**Architecture cible**

*Approche 1 — Utilisation de aws\$1s3.table\$1import\$1from\$1s3*

À partir d'un serveur sur site, un fichier contenant un modèle d'e-mail avec des caractères multioctets et un formatage personnalisé est transféré vers Amazon S3. La fonction de base de données personnalisée fournie par ce modèle utilise la `aws_s3.table_import_from_s3` fonction with `file_encoding` pour charger des fichiers dans la base de données et renvoyer les résultats de la requête sous forme de type de `TEXT` données.

![\[Processus en quatre étapes depuis le serveur sur site jusqu'à la sortie TEXT de la base de données Aurora.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/9c46b385-e8a0-4e50-b856-d522c44d79e3.png)


1. Les fichiers sont transférés vers le compartiment S3 intermédiaire.

1. Les fichiers sont chargés dans la base de données compatible avec Amazon Aurora PostgreSQL.

1. À l'aide du client pgAdmin, la `load_file_into_clob` fonction personnalisée est déployée dans la base de données Aurora.

1. La fonction personnalisée est utilisée en interne `table_import_from_s3` avec file\$1encoding. La sortie de la fonction est obtenue en utilisant `array_to_string` et `array_agg` comme `TEXT` sortie.

*Approche 2 — Encodage en hexadécimal à l'extérieur de la base de données et décodage pour afficher le TEXTE à l'intérieur de la base de données*

Un fichier provenant d'un serveur local ou d'un système de fichiers local est converti en vidage hexadécimal. Le fichier est ensuite importé dans PostgreSQL sous forme de champ. `TEXT`

![\[Processus en trois étapes utilisant le vidage hexadécimal.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/563038ca-f890-4874-85df-d0f82d99800a.png)


1. Convertissez le fichier en vidage hexadécimal dans la ligne de commande à l'aide de l'`xxd -p`option.

1. Téléchargez les fichiers de vidage hexadécimal dans un environnement compatible avec Aurora PostgreSQL à l'aide de `\copy` cette option, puis décodez les fichiers de vidage hexadécimal en binaire.

1. Codez les données binaires à renvoyer sous la forme`TEXT`.

## Outils
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-tools"></a>

**Services AWS**
+ [Amazon Aurora PostgreSQL Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) est un moteur de base de données relationnelle entièrement géré et compatible ACID qui vous aide à configurer, exploiter et dimensionner les déploiements PostgreSQL.
+ [L'interface de ligne de commande AWS (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) est un outil open source qui vous permet d'interagir avec les services AWS par le biais de commandes dans votre shell de ligne de commande.

**Autres outils**
+ [pgAdmin4](https://www.pgadmin.org/) est une plateforme d'administration et de développement open source pour PostgreSQL. pgAdmin4 peut être utilisé sous Linux, Unix, Mac OS et Windows pour gérer PostgreSQL.  

## Épopées
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-epics"></a>

### Approche 1 : Importer des données depuis Amazon S3 vers une version compatible avec Aurora PostgreSQL
<a name="approach-1-import-data-from-amazon-s3-to-aurora-postgresql-compatible"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Lancez une EC2 instance. | Pour obtenir des instructions sur le lancement d'une instance, consultez [Lancer votre instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html). | DBA | 
| Installez l'outil pgAdmin du client PostgreSQL. | Téléchargez et installez [pgAdmin.](https://www.pgadmin.org/download/) | DBA | 
| Créez une politique IAM. | Créez une politique AWS Identity and Access Management (IAM) nommée `aurora-s3-access-pol` qui accorde l'accès au compartiment S3 dans lequel les fichiers seront stockés. Utilisez le code suivant, en le `<bucket-name>` remplaçant par le nom de votre compartiment S3.<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Action": [<br />                "s3:GetObject",<br />                "s3:AbortMultipartUpload",<br />                "s3:DeleteObject",<br />                "s3:ListMultipartUploadParts",<br />                "s3:PutObject",<br />                "s3:ListBucket"<br />            ],<br />            "Resource": [<br />                "arn:aws:s3:::<bucket-name>/*",<br />                "arn:aws:s3:::<bucket-name>"<br />            ]<br />        }<br />    ]<br />}</pre> | DBA | 
| Créez un rôle IAM pour l'importation d'objets depuis Amazon S3 vers Aurora compatible avec PostgreSQL. | Utilisez le code suivant pour créer un rôle IAM nommé `aurora-s3-import-role` avec la relation de [AssumeRole](https://docs.amazonaws.cn/en_us/STS/latest/APIReference/API_AssumeRole.html)confiance. `AssumeRole`permet à Aurora d'accéder à d'autres services AWS en votre nom.<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Effect": "Allow","Principal": {<br />        "Service": "rds.amazonaws.com"<br />      },"Action": "sts:AssumeRole"<br />    }<br />  ]<br />}<br /></pre> | DBA | 
| Associez le rôle IAM au cluster. | Pour associer le rôle IAM au cluster de base de données compatible Aurora PostgreSQL, exécutez la commande AWS CLI suivante. Modifiez `<Account-ID>` l'ID du compte AWS qui héberge la base de données compatible Aurora PostgreSQL. Cela permet à la base de données compatible Aurora PostgreSQL d'accéder au compartiment S3.<pre>aws rds add-role-to-db-cluster --db-cluster-identifier aurora-postgres-cl<br />--feature-name s3Import --role-arn arn:aws:iam::<Account-ID>:role/aurora-s3-import-role</pre> | DBA | 
| Téléchargez l'exemple sur Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA, propriétaire de l'application | 
| Déployez la fonction personnalisée. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | Propriétaire de l'application, DBA | 
| Exécutez la fonction personnalisée pour importer les données dans la base de données. | Exécutez la commande SQL suivante en remplaçant les éléments entre crochets par les valeurs appropriées.<pre>select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>Remplacez les éléments entre crochets par les valeurs appropriées, comme indiqué dans l'exemple suivant, avant d'exécuter la commande.<pre>Select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>La commande charge le fichier depuis Amazon S3 et renvoie le résultat sous la forme`TEXT`. | Propriétaire de l'application, DBA | 

### Approche 2 : convertir le fichier modèle en un dump hexadécimal dans un système Linux local
<a name="approach-2-convert-the-template-file-into-a-hex-dump-in-a-local-linux-system"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Convertissez le fichier modèle en un dump hexadécimal. | L'utilitaire Hexdump affiche le contenu des fichiers binaires en hexadécimal, décimal, octal ou ASCII. La `hexdump` commande fait partie du `util-linux` package et est préinstallée dans les distributions Linux. Le package Hexdump RPM fait également partie d'Amazon Linux 2. (: Le support d'Amazon Linux 2 touche à sa fin. Pour plus d'informations, consultez [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).)Pour convertir le contenu du fichier en un dump hexadécimal, exécutez la commande shell suivante.<pre>xxd -p </path/file.vm> | tr -d '\n' > </path/file.hex></pre>Remplacez le chemin et le fichier par les valeurs appropriées, comme indiqué dans l'exemple suivant.<pre>xxd -p employee.salary.event.notification.email.vm | tr -d '\n' > employee.salary.event.notification.email.vm.hex</pre> | DBA | 
| Chargez le fichier hexdump dans le schéma de base de données. | Utilisez les commandes suivantes pour charger le fichier hexdump dans la base de données compatible Aurora PostgreSQL.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA | 

## Ressources connexes
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-resources"></a>

**Références**
+ [Utilisation d'une base de données PostgreSQL comme cible pour AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [Manuel de migration d'Oracle Database 19c vers Amazon Aurora avec compatibilité avec PostgreSQL (12.4)](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook-12.4.pdf)
+ [Création de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)
+ [Associer un rôle IAM à un cluster de base de données Amazon Aurora MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html)
+ [pgAdmin](https://www.pgadmin.org/)

**Didacticiels**
+ [Getting Started with Amazon RDS](https://aws.amazon.com/rds/getting-started/) (Démarrer avec Amazon RDS)
+ [Migrer d'Oracle vers Amazon Aurora](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)

## Informations supplémentaires
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-additional"></a>

**Fonction personnalisée load\$1file\$1into\$1clob**

```
CREATE OR REPLACE FUNCTION load_file_into_clob(
    s3_bucket_name text,
    s3_bucket_region text,
    file_name text,
    file_delimiter character DEFAULT '&'::bpchar,
    file_encoding text DEFAULT 'UTF8'::text)
    RETURNS text
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
    blob_data BYTEA;
    clob_data TEXT;
    l_table_name CHARACTER VARYING(50) := 'file_upload_hex';
    l_column_name CHARACTER VARYING(50) := 'template';
    l_return_text TEXT;
    l_option_text CHARACTER VARYING(150);
    l_sql_stmt CHARACTER VARYING(500);
        
BEGIN
    
    EXECUTE format ('CREATE TEMPORARY TABLE %I (%I text, id_serial serial)', l_table_name, l_column_name);
    
    l_sql_stmt := 'select ''(format text, delimiter ''''' || file_delimiter || ''''', encoding ''''' || file_encoding ||  ''''')'' ';
    
    EXECUTE FORMAT(l_sql_stmt)
    INTO l_option_text;
    
    EXECUTE FORMAT('SELECT aws_s3.table_import_from_s3($1,$2,$6, aws_commons.create_s3_uri($3,$4,$5))')
    INTO l_return_text
    USING l_table_name, l_column_name, s3_bucket_name, file_name,s3_bucket_region,l_option_text;
    
    EXECUTE format('select array_to_string(array_agg(%I order by id_serial),E''\n'') from %I', l_column_name, l_table_name)
    INTO clob_data;
    
    drop table file_upload_hex;
    
    RETURN clob_data;
END;
$BODY$;
```

**Modèle d'e-mail**

```
######################################################################################
##                                                                                    ##
##    johndoe Template Type: email                                                    ##
##    File: johndoe.salary.event.notification.email.vm                                ##
##    Author: Aimée Étienne    Date 1/10/2021                                                ##
##  Purpose: Email template used by EmplmanagerEJB to inform a johndoe they         ##
##        have been given access to a salary event                                    ##
##    Template Attributes:                                                             ##
##        invitedUser - PersonDetails object for the invited user                        ##
##        salaryEvent - OfferDetails object for the event the user was given access    ##
##        buyercollege - CompDetails object for the college owning the salary event    ##
##        salaryCoordinator - PersonDetails of the salary coordinator for the event    ##
##        idp - Identity Provider of the email recipient                                ##
##        httpWebRoot - HTTP address of the server                                    ##
##                                                                                    ##
######################################################################################

$!invitedUser.firstname $!invitedUser.lastname,

Ce courriel confirme que vous avez ete invite par $!salaryCoordinator.firstname $!salaryCoordinator.lastname de $buyercollege.collegeName a participer a l'evenement "$salaryEvent.offeringtitle" sur johndoeMaster Sourcing Intelligence.

Votre nom d'utilisateur est $!invitedUser.username

Veuillez suivre le lien ci-dessous pour acceder a l'evenement.

${httpWebRoot}/myDashboard.do?idp=$!{idp}

Si vous avez oublie votre mot de passe, utilisez le lien "Mot de passe oublie" situe sur l'ecran de connexion et entrez votre nom d'utilisateur ci-dessus.

Si vous avez des questions ou des preoccupations, nous vous invitons a communiquer avec le coordonnateur de l'evenement $!salaryCoordinator.firstname $!salaryCoordinator.lastname au ${salaryCoordinator.workphone}.

*******

johndoeMaster Sourcing Intelligence est une plateforme de soumission en ligne pour les equipements, les materiaux et les services.

Si vous avez des difficultes ou des questions, envoyez un courriel a support@johndoeMaster.com pour obtenir de l'aide.
```