

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Laden Sie BLOB-Dateien mithilfe der Dateikodierung in Aurora PostgreSQL-kompatibel in TEXT
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible"></a>

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

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

Während der Migration müssen Sie häufig unstrukturierte und strukturierte Daten verarbeiten, die aus Dateien in einem lokalen Dateisystem geladen wurden. Die Daten können sich auch in einem Zeichensatz befinden, der sich vom Zeichensatz der Datenbank unterscheidet.

Diese Dateien enthalten die folgenden Datentypen:
+ **Metadaten** — Diese Daten beschreiben die Dateistruktur.
+ **Semistrukturierte Daten** — Dies sind Textzeichenfolgen in einem bestimmten Format wie JSON oder XML. Möglicherweise können Sie Aussagen zu solchen Daten treffen, z. B. „beginnt immer mit '<'“ oder „enthält keine Zeilenumbruchzeichen“.
+ **Volltext** — Diese Daten enthalten normalerweise alle Arten von Zeichen, einschließlich Zeilenumbruch- und Anführungszeichen. Sie können auch aus Multibyte-Zeichen in UTF-8 bestehen.
+ **Binärdaten** — Diese Daten können Bytes oder Kombinationen von Bytes enthalten, einschließlich Nullen und Markierungen. end-of-file

Das Laden einer Mischung dieser Datentypen kann eine Herausforderung sein.

Das Muster kann mit lokalen Oracle-Datenbanken, Oracle-Datenbanken, die sich auf Amazon Elastic Compute Cloud (Amazon EC2) -Instances in der Amazon Web Services (AWS) -Cloud befinden, und Amazon Relational Database Service (Amazon RDS) für Oracle-Datenbanken verwendet werden. Als Beispiel verwendet dieses Muster Amazon Aurora PostgreSQL-Compatible Edition.

In Oracle Database können Sie mithilfe eines `BFILE` (binären Datei-) Zeigers, des `DBMS_LOB` Pakets und der Oracle-Systemfunktionen Daten aus einer Datei laden und mit Zeichenkodierung in CLOB konvertieren. Da PostgreSQL den BLOB-Datentyp bei der Migration zu einer Amazon Aurora PostgreSQL-Compatible Edition-Datenbank nicht unterstützt, müssen diese Funktionen in PostgreSQL-kompatible Skripten konvertiert werden.

Dieses Muster bietet zwei Ansätze für das Laden einer Datei in eine einzelne Datenbankspalte in einer Amazon Aurora PostgreSQL-kompatiblen Datenbank:
+ Ansatz 1 — Sie importieren Daten aus Ihrem Amazon Simple Storage Service (Amazon S3) -Bucket, indem Sie die `table_import_from_s3` Funktion der `aws_s3` Erweiterung mit der Kodierungsoption verwenden.
+ Ansatz 2 — Sie kodieren außerhalb der Datenbank hexadezimal und dekodieren dann, um sie innerhalb der Datenbank anzuzeigen. `TEXT`

Wir empfehlen die Verwendung von Approach 1, da Aurora PostgreSQL-Compatible direkt in die Erweiterung integriert ist. `aws_s3`

Dieses Muster verwendet das Beispiel des Ladens einer Flat-Datei, die eine E-Mail-Vorlage mit Multibyte-Zeichen und unterschiedlicher Formatierung enthält, in eine Amazon Aurora PostgreSQL-kompatible Datenbank.

## Voraussetzungen und Einschränkungen
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto
+ Eine Amazon RDS-Instance oder eine Aurora PostgreSQL-kompatible Instance
+ Ein grundlegendes Verständnis von SQL und dem relationalen Datenbankmanagementsystem (RDBMS)
+ Ein Amazon Simple Storage Service (Amazon S3) -Bucket.
+ Kenntnisse der Systemfunktionen in Oracle und PostgreSQL
+ RPM-Paket HexDump -XXD-0.1.1 (in Amazon Linux 2 enthalten)
**Anmerkung**  
Amazon Linux 2 nähert sich dem Ende der Unterstützung. Weitere Informationen finden Sie unter [Amazon Linux FAQs 2.](https://aws.amazon.com/amazon-linux-2/faqs/)

**Einschränkungen**
+ Für den `TEXT` Datentyp beträgt die längste mögliche Zeichenfolge, die gespeichert werden kann, etwa 1 GB.

**Produktversionen**
+ Aurora unterstützt die PostgreSQL-Versionen, die in [Amazon Aurora PostgreSQL-Updates](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html) aufgeführt sind.

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

**Zieltechnologie-Stack**
+ Aurora PostgreSQL-kompatibel

**Zielarchitektur**

*Ansatz 1 — Verwendung von aws\$1s3.table\$1import\$1from\$1s3*

Von einem lokalen Server wird eine Datei, die eine E-Mail-Vorlage mit Multibyte-Zeichen und benutzerdefinierter Formatierung enthält, an Amazon S3 übertragen. Die durch dieses Muster bereitgestellte benutzerdefinierte Datenbankfunktion verwendet die `aws_s3.table_import_from_s3` Funktion mit`file_encoding`, um Dateien in die Datenbank zu laden und Abfrageergebnisse als `TEXT` Datentyp zurückzugeben.

![\[Vierstufiger Prozess vom lokalen Server zur TEXT-Ausgabe aus der Aurora-Datenbank.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/9c46b385-e8a0-4e50-b856-d522c44d79e3.png)


1. Dateien werden in den Staging-S3-Bucket übertragen.

1. Dateien werden in die Amazon Aurora PostgreSQL-kompatible Datenbank hochgeladen.

1. Mit dem pgAdmin-Client `load_file_into_clob` wird die benutzerdefinierte Funktion in der Aurora-Datenbank bereitgestellt.

1. Die benutzerdefinierte Funktion wird intern `table_import_from_s3` mit file\$1encoding verwendet. Die Ausgabe der Funktion wird durch die Verwendung von `array_to_string` und `array_agg` als `TEXT` Ausgabe abgerufen.

*Ansatz 2 — Hexadezimale Kodierung außerhalb der Datenbank und Dekodierung zur Anzeige von TEXT innerhalb der Datenbank*

Eine Datei von einem lokalen Server oder einem lokalen Dateisystem wird in einen Hex-Dump konvertiert. Dann wird die Datei als Feld in PostgreSQL importiert. `TEXT`

![\[Dreistufiger Prozess mit Hex-Dump.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/563038ca-f890-4874-85df-d0f82d99800a.png)


1. Konvertieren Sie die Datei in der Befehlszeile mit der Option in einen Hex-Dump. `xxd -p`

1. Laden Sie die Hex-Dump-Dateien mithilfe der `\copy` Option in das Aurora PostgreSQL-kompatible Format hoch und dekodieren Sie dann die Hex-Dump-Dateien in Binärdateien.

1. Kodieren Sie die Binärdaten, die zurückgegeben werden sollen als. `TEXT`

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

**AWS-Services**
+ [Amazon Aurora PostgreSQL-Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) ist eine vollständig verwaltete, ACID-konforme relationale Datenbank-Engine, die Sie bei der Einrichtung, dem Betrieb und der Skalierung von PostgreSQL-Bereitstellungen unterstützt.
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) ist ein Open-Source-Tool, mit dem Sie über Befehle in Ihrer Befehlszeilen-Shell mit AWS-Services interagieren können.

**Andere Tools**
+ [pgAdmin4](https://www.pgadmin.org/) ist eine Open-Source-Verwaltungs- und Entwicklungsplattform für PostgreSQL. pgAdmin4 kann unter Linux, Unix, Mac OS und Windows zur Verwaltung von PostgreSQL verwendet werden.  

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

### Ansatz 1: Daten von Amazon S3 nach Aurora PostgreSQL-kompatibel importieren
<a name="approach-1-import-data-from-amazon-s3-to-aurora-postgresql-compatible"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Starten Sie eine EC2 Instanz. | Anweisungen zum Starten einer Instance finden Sie unter [Starten Sie Ihre Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html). | DBA | 
| Installieren Sie das PostgreSQL-Client-Tool pgAdmin. | Downloaden und installieren Sie [pgAdmin](https://www.pgadmin.org/download/). | DBA | 
| Erstellen Sie eine IAM-Richtlinie. | Erstellen Sie eine AWS Identity and Access Management (IAM) -Richtlinie mit dem Namen`aurora-s3-access-pol`, die Zugriff auf den S3-Bucket gewährt, in dem die Dateien gespeichert werden. Verwenden Sie den folgenden Code und `<bucket-name>` ersetzen Sie ihn durch den Namen Ihres S3-Buckets.<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 | 
| Erstellen Sie eine IAM-Rolle für den Objektimport von Amazon S3 nach Aurora PostgreSQL-kompatibel. | Verwenden Sie den folgenden Code, um eine IAM-Rolle mit dem Namen der Vertrauensbeziehung zu erstellen. `aurora-s3-import-role` [AssumeRole](https://docs.amazonaws.cn/en_us/STS/latest/APIReference/API_AssumeRole.html) `AssumeRole`ermöglicht Aurora, in Ihrem Namen auf andere AWS-Services zuzugreifen.<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 | 
| Ordnen Sie die IAM-Rolle dem Cluster zu. | Um die IAM-Rolle dem Aurora PostgreSQL-kompatiblen Datenbank-Cluster zuzuordnen, führen Sie den folgenden AWS-CLI-Befehl aus. Ändern Sie `<Account-ID>` die ID des AWS-Kontos, das die Aurora PostgreSQL-kompatible Datenbank hostet. Dadurch kann die Aurora PostgreSQL-kompatible Datenbank auf den S3-Bucket zugreifen.<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 | 
| Laden Sie das Beispiel auf Amazon S3 hoch. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA, Besitzer der App | 
| Stellen Sie die benutzerdefinierte Funktion bereit. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | Besitzer der App, DBA | 
| Führen Sie die benutzerdefinierte Funktion zum Importieren der Daten in die Datenbank aus. | Führen Sie den folgenden SQL-Befehl aus und ersetzen Sie die Elemente in spitzen Klammern durch die entsprechenden Werte.<pre>select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>Ersetzen Sie die Elemente in spitzen Klammern durch die entsprechenden Werte, wie im folgenden Beispiel gezeigt, bevor Sie den Befehl ausführen.<pre>Select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre>Der Befehl lädt die Datei aus Amazon S3 und gibt die Ausgabe als zurück`TEXT`. | Besitzer der App, DBA | 

### Ansatz 2: Konvertieren Sie die Vorlagendatei in einen Hex-Dump in einem lokalen Linux-System
<a name="approach-2-convert-the-template-file-into-a-hex-dump-in-a-local-linux-system"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Konvertiert die Vorlagendatei in einen Hex-Dump. | Das Hexdump-Hilfsprogramm zeigt den Inhalt von Binärdateien in Hexadezimal, Dezimal, Oktal oder ASCII an. Der `hexdump` Befehl ist Teil des `util-linux` Pakets und in Linux-Distributionen vorinstalliert. Das Hexdump RPM-Paket ist ebenfalls Teil von Amazon Linux 2. (: Amazon Linux 2 nähert sich dem Ende der Unterstützung. Weitere Informationen finden Sie unter [Amazon Linux FAQs 2.](https://aws.amazon.com/amazon-linux-2/faqs/))Um den Dateiinhalt in einen Hex-Dump zu konvertieren, führen Sie den folgenden Shell-Befehl aus.<pre>xxd -p </path/file.vm> | tr -d '\n' > </path/file.hex></pre>Ersetzen Sie den Pfad und die Datei durch die entsprechenden Werte, wie im folgenden Beispiel gezeigt.<pre>xxd -p employee.salary.event.notification.email.vm | tr -d '\n' > employee.salary.event.notification.email.vm.hex</pre> | DBA | 
| Laden Sie die Hexdump-Datei in das Datenbankschema. | Verwenden Sie die folgenden Befehle, um die Hexdump-Datei in die Aurora PostgreSQL-kompatible Datenbank zu laden.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA | 

## Zugehörige Ressourcen
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-resources"></a>

**Referenzen**
+ [Verwenden einer PostgreSQL-Datenbank als Ziel für den AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [Playbook zur Migration von Oracle Database 19c zu Amazon Aurora mit PostgreSQL-Kompatibilität (12.4)](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook-12.4.pdf)
+ [IAM-Richtlinien erstellen](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)
+ [Zuordnen einer IAM-Rolle zu einem Amazon Aurora MySQL-DB-Cluster](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html)
+ [pgAdmin](https://www.pgadmin.org/)

**Tutorials**
+ [Erste Schritte mit Amazon RDS](https://aws.amazon.com/rds/getting-started/)
+ [Migrieren Sie von Oracle zu Amazon Aurora](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)

## Zusätzliche Informationen
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-additional"></a>

**benutzerdefinierte Funktion 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$;
```

**E-Mail-Vorlage**

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