

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Carica i file BLOB in formato TEXT utilizzando la codifica dei file in Aurora, compatibile con PostgreSQL
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible"></a>

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

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

Spesso durante la migrazione, ci sono casi in cui è necessario elaborare dati strutturati e non strutturati caricati da file su un file system locale. I dati potrebbero anche essere in un set di caratteri diverso dal set di caratteri del database.

Questi file contengono i seguenti tipi di dati:
+ **Metadati**: questi dati descrivono la struttura del file.
+ **Dati semistrutturati**: si tratta di stringhe di testo in un formato specifico, come JSON o XML. Potresti essere in grado di fare affermazioni su tali dati, ad esempio «inizierà sempre con '<'" o «non contiene caratteri di nuova riga».
+ **Testo completo**: questi dati in genere contengono tutti i tipi di caratteri, inclusi i caratteri di nuova riga e le virgolette. Potrebbe anche essere costituito da caratteri multibyte in UTF-8.
+ **Dati binari: questi dati** possono contenere byte o combinazioni di byte, inclusi valori null e marcatori. end-of-file

Caricare una combinazione di questi tipi di dati può essere una sfida.

Il modello può essere utilizzato con database Oracle locali, database Oracle che si trovano su istanze Amazon Elastic Compute Cloud (Amazon EC2) sul cloud Amazon Web Services (AWS) e Amazon Relational Database Service (Amazon RDS) per database Oracle. Ad esempio, questo modello utilizza Amazon Aurora PostgreSQL Compatible Edition.

In Oracle Database, con l'aiuto di un puntatore `BFILE` (file binario), del `DBMS_LOB` pacchetto e delle funzioni di sistema Oracle, è possibile caricare da file e convertirlo in CLOB con codifica dei caratteri. Poiché PostgreSQL non supporta il tipo di dati BLOB durante la migrazione a un database Edition compatibile con Amazon Aurora PostgreSQL, queste funzioni devono essere convertite in script compatibili con PostgreSQL.

Questo modello fornisce due approcci per caricare un file in una singola colonna di database in un database compatibile con Amazon Aurora PostgreSQL:
+ Approccio 1: importi i dati dal tuo bucket Amazon Simple Storage Service (Amazon S3) utilizzando `table_import_from_s3` la funzione dell'estensione con l'opzione `aws_s3` encode.
+ Approccio 2: si codifica in formato esadecimale all'esterno del database, quindi si decodifica per visualizzare all'interno del database. `TEXT`

Si consiglia di utilizzare Approach 1 perché Aurora PostgreSQL Compatible ha un'integrazione diretta con l'estensione. `aws_s3`

Questo modello utilizza l'esempio del caricamento di un file flat contenente un modello di e-mail, con caratteri multibyte e una formattazione distinta, in un database compatibile con Amazon Aurora PostgreSQL.

## Prerequisiti e limitazioni
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-prereqs"></a>

**Prerequisiti**
+ Un account AWS attivo
+ Un'istanza Amazon RDS o un'istanza Aurora compatibile con PostgreSQL
+ Una conoscenza di base di SQL e Relational Database Management System (RDBMS)
+ Un bucket Amazon Simple Storage Service (Amazon S3).
+ Conoscenza delle funzioni di sistema in Oracle e PostgreSQL
+ Pacchetto RPM HexDump -XXD-0.1.1 (incluso con Amazon Linux 2)
**Nota**  
Amazon Linux 2 sta per terminare il supporto. Per ulteriori informazioni, consulta [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).

**Limitazioni**
+ Per il tipo di `TEXT` dati, la stringa di caratteri più lunga possibile che può essere memorizzata è di circa 1 GB.

**Versioni del prodotto**
+ [Aurora supporta le versioni di PostgreSQL elencate negli aggiornamenti di Amazon Aurora PostgreSQL.](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html)

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

**Stack tecnologico Target**
+ Compatibile con Aurora PostgreSQL

**Architettura Target**

*Approccio 1: utilizzo di aws\$1s3.table\$1import\$1from\$1s3*

Da un server locale, un file contenente un modello di e-mail con caratteri multibyte e formattazione personalizzata viene trasferito su Amazon S3. La funzione di database personalizzata fornita da questo modello utilizza la `aws_s3.table_import_from_s3` funzione with `file_encoding` per caricare file nel database e restituire i risultati delle query come tipo di dati. `TEXT`

![\[Processo in quattro fasi dal server locale all'output TEXT dal database Aurora.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/9c46b385-e8a0-4e50-b856-d522c44d79e3.png)


1. I file vengono trasferiti nel bucket S3 di staging.

1. I file vengono caricati nel database compatibile con Amazon Aurora PostgreSQL.

1. Utilizzando il client pgAdmin, la `load_file_into_clob` funzione personalizzata viene distribuita nel database Aurora.

1. La funzione personalizzata utilizza internamente file\$1encoding. `table_import_from_s3` L'output della funzione viene ottenuto utilizzando `array_to_string` e come output. `array_agg` `TEXT`

*Approccio 2: codifica in formato esadecimale all'esterno del database e decodifica per visualizzare il TESTO all'interno del database*

Un file proveniente da un server locale o da un file system locale viene convertito in un dump esadecimale. Quindi il file viene importato in PostgreSQL come campo. `TEXT`

![\[Processo in tre fasi utilizzando Hex dump.\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/563038ca-f890-4874-85df-d0f82d99800a.png)


1. Converti il file in un dump esadecimale nella riga di comando utilizzando l'opzione. `xxd -p`

1. Carica i file di dump esadecimali in Aurora PostgreSQL compatibile utilizzando `\copy` l'opzione, quindi decodifica i file di dump esadecimali in formato binario.

1. `TEXT`Codifica i dati binari per restituirli come.

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

**Servizi AWS**
+ [Amazon Aurora PostgreSQL Compatible Edition è un motore](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) di database relazionale completamente gestito e conforme ad ACID che ti aiuta a configurare, gestire e scalare le distribuzioni PostgreSQL.
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) è uno strumento open source che ti aiuta a interagire con i servizi AWS tramite comandi nella tua shell a riga di comando.

**Altri strumenti**
+ [pgAdmin4](https://www.pgadmin.org/) è una piattaforma di amministrazione e sviluppo open source per PostgreSQL. pgAdmin4 può essere utilizzato su Linux, Unix, mac OS e Windows per gestire PostgreSQL.  

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

### Approccio 1: importazione di dati da Amazon S3 ad Aurora, compatibile con PostgreSQL
<a name="approach-1-import-data-from-amazon-s3-to-aurora-postgresql-compatible"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Avvia un' EC2 istanza. | Per istruzioni sull'avvio di un'istanza, consulta [Launch your istance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html). | DBA | 
| Installa lo strumento pgAdmin del client PostgreSQL. | Scarica e installa [pgAdmin.](https://www.pgadmin.org/download/) | DBA | 
| Creare una policy IAM | Crea una policy AWS Identity and Access Management (IAM) denominata `aurora-s3-access-pol` che garantisca l'accesso al bucket S3 in cui verranno archiviati i file. Usa il codice seguente, sostituendolo `<bucket-name>` con il nome del tuo bucket 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 | 
| Crea un ruolo IAM per l'importazione di oggetti da Amazon S3 ad Aurora, compatibile con PostgreSQL. | Utilizza il codice seguente per creare un ruolo IAM denominato con la relazione di trust. `aurora-s3-import-role` [AssumeRole](https://docs.amazonaws.cn/en_us/STS/latest/APIReference/API_AssumeRole.html) `AssumeRole`consente ad Aurora di accedere ad altri servizi AWS per tuo conto.<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 | 
| Associa il ruolo IAM al cluster. | Per associare il ruolo IAM al cluster di database compatibile con Aurora PostgreSQL, esegui il seguente comando AWS CLI. Passa `<Account-ID>` all'ID dell'account AWS che ospita il database Aurora compatibile con PostgreSQL. Ciò consente al database compatibile con Aurora PostgreSQL di accedere al bucket 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 | 
| Carica l'esempio su Amazon S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA, proprietario dell'app | 
| Implementa la funzione personalizzata. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | Proprietario dell'app, DBA | 
| Esegui la funzione personalizzata per importare i dati nel database. | Esegui il seguente comando SQL, sostituendo gli elementi tra parentesi angolari con i valori appropriati.<pre>select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>Sostituite gli elementi tra parentesi angolari con i valori appropriati, come illustrato nell'esempio seguente, prima di eseguire il comando.<pre>Select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>Il comando carica il file da Amazon S3 e restituisce l'output come. `TEXT` | Proprietario dell'app, DBA | 

### Approccio 2: convertire il file modello in un dump esadecimale in un sistema Linux locale
<a name="approach-2-convert-the-template-file-into-a-hex-dump-in-a-local-linux-system"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Converti il file modello in un dump esadecimale. | L'utilità Hexdump visualizza il contenuto dei file binari in formato esadecimale, decimale, ottale o ASCII. Il `hexdump` comando fa parte del pacchetto e viene preinstallato nelle distribuzioni Linux. `util-linux` Anche il pacchetto RPM Hexdump fa parte di Amazon Linux 2. (: Amazon Linux 2 sta per terminare il supporto. Per ulteriori informazioni, consulta [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).)Per convertire il contenuto del file in un dump esadecimale, esegui il seguente comando shell.<pre>xxd -p </path/file.vm> | tr -d '\n' > </path/file.hex></pre>Sostituite il percorso e il file con i valori appropriati, come mostrato nell'esempio seguente.<pre>xxd -p employee.salary.event.notification.email.vm | tr -d '\n' > employee.salary.event.notification.email.vm.hex</pre> | DBA | 
| Carica il file hexdump nello schema del database. | Usa i seguenti comandi per caricare il file hexdump nel database Aurora compatibile con PostgreSQL.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA | 

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

**Riferimenti**
+ [Utilizzo di un database PostgreSQL come destinazione per AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [Playbook sulla migrazione da Oracle Database 19c ad Amazon Aurora con compatibilità PostgreSQL (12.4)](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook-12.4.pdf)
+ [Creazione di politiche IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)
+ [Associazione di un ruolo IAM a un cluster Amazon Aurora MySQL DB](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html)
+ [pgAdmin](https://www.pgadmin.org/)

**Tutorial**
+ [Nozioni di base su Amazon RDS](https://aws.amazon.com/rds/getting-started/)
+ [Esegui la migrazione da Oracle ad Amazon Aurora](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)

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

**funzione personalizzata 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$;
```

**Modello di email**

```
######################################################################################
##                                                                                    ##
##    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.
```