

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Faça o upload de arquivos BLOB em TEXT usando a codificação de arquivos no Aurora PostgreSQL-Compatible
<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*

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

Muitas vezes, durante a migração, há casos em que você precisa processar dados estruturados e não estruturados que são carregados a partir de arquivos disponíveis em um sistema local. Os dados também podem estar em um conjunto de caracteres diferente do conjunto de caracteres do banco de dados.

Esses arquivos contêm os seguintes tipos de dados:
+ **Metadados**: esses dados descrevem a estrutura do arquivo.
+ **Dados semiestruturados**: são strings de texto em um formato específico, como JSON ou XML. Talvez você possa fazer afirmações sobre esses dados, como “sempre começará com '<'” ou “não contém nenhum caractere de nova linha”.
+ **Texto completo**: esses dados geralmente contêm todos os tipos de caracteres, incluindo caracteres de nova linha e aspas. Também pode consistir em caracteres de vários bytes em UTF-8.
+ **Dados binários** — esses dados podem conter bytes ou combinações de bytes, incluindo nulos e end-of-file marcadores.

Carregar uma mistura desses tipos de dados pode ser um desafio.

O padrão pode ser usado com bancos de dados Oracle locais, bancos de dados Oracle que estão em instâncias do Amazon Elastic Compute Cloud EC2 (Amazon) na Amazon Web Services (AWS) Cloud e Amazon Relational Database Service (Amazon RDS) para bancos de dados Oracle. Para fins de ilustração, esse padrão está usando o Amazon Aurora Edição Compatível com PostgreSQL.

No banco de dados Oracle, com a ajuda de um ponteiro `BFILE` (arquivo binário), do pacote `DBMS_LOB` e das funções do sistema Oracle, você pode carregar a partir do arquivo e convertê-lo em CLOB com codificação de caracteres. Como o PostgreSQL não fornece suporte para o tipo de dados BLOB ao migrar para um banco de dados Amazon Aurora Edição Compatível com PostgreSQL, essas funções devem ser convertidas em scripts compatíveis com o PostgreSQL.

Esse padrão fornece duas abordagens para carregar um arquivo em uma única coluna de um banco de dados Amazon Aurora compatível com PostgreSQL:
+ Abordagem 1 – Você importa dados do bucket do Amazon Simple Storage Service (Amazon S3) usando a função `table_import_from_s3` da extensão `aws_s3` com a opção de codificação.
+ Abordagem 2 – Você codifica em hexadecimal fora do banco de dados e, em seguida, decodifica para visualizar `TEXT` dentro do banco de dados.

Recomendamos usar a Abordagem 1 porque o Aurora compatível com PostgreSQL tem integração direta com a extensão `aws_s3`.

Esse padrão usa o exemplo de carregamento de um arquivo simples que contém um modelo de e-mail, caracteres de vários bytes e formatação distinta, em um banco de dados Amazon Aurora compatível com PostgreSQL.

## Pré-requisitos e limitações
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Uma instância do Amazon RDS ou uma instância do Aurora compatível com PostgreSQL
+ Uma compreensão básica do SQL e do sistema de gerenciamento de banco de dados relacional (RDBMS)
+ Um bucket do Amazon Simple Storage Service (Amazon S3).
+ Conhecimento das funções do sistema em Oracle e PostgreSQL
+ Pacote RPM HexDump -XXD-0.1.1 (incluído no Amazon Linux 2)
**nota**  
O Amazon Linux 2 está se aproximando do fim do suporte. Para obter mais informações, consulte o [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).

**Limitações**
+ Para o tipo de dados `TEXT`, o string de caracteres mais longo possível que pode ser armazenado é de cerca de 1 GB.

**Versões do produto**
+ [O Aurora oferece suporte às versões do PostgreSQL listadas nas atualizações do Amazon Aurora PostgreSQL.](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html)

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

**Pilha de tecnologias de destino**
+ Aurora compatível com PostgreSQL

**Arquitetura de destino**

*Abordagem 1 – Usar aws\_s3.table\_import\_from\_s3 *

A partir de um servidor on-premises, um arquivo contendo um modelo de e-mail com caracteres de vários bytes e formatação personalizada é transferido para o Amazon S3. A função de banco de dados personalizada fornecida por esse padrão usa a função `aws_s3.table_import_from_s3` com `file_encoding` para carregar arquivos no banco de dados e retornar os resultados da consulta  como o tipo de dados `TEXT`.

![Processo em quatro etapas, desde o servidor on-premises até a saída TEXT, proveniente do banco de dados do Aurora.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/9c46b385-e8a0-4e50-b856-d522c44d79e3.png)


1. Os arquivos são transferidos para o bucket do S3 de preparação.

1. Os arquivos são carregados para o banco de dados Amazon Aurora PostgreSQL-Compatible.

1. Usando o cliente pGAdmin, a função personalizada `load_file_into_clob` é implantada no banco de dados Aurora.

1. A função personalizada usa `table_import_from_s3` internamente com file\_encoding. O resultado da função é obtido usando `array_to_string` e `array_agg` como o resultado `TEXT`.

*Abordagem 2 – Codificação em hexadecimal fora do banco de dados e, em seguida, decodifica para visualizar TEXT dentro do banco de dados*

Um arquivo de um servidor on-premises ou de um sistema de arquivos local é convertido em um hex dump. Em seguida, o arquivo é importado para o PostgreSQL como um campo `TEXT`.

![Processo em três etapas usando o despejo hexadecimal.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/563038ca-f890-4874-85df-d0f82d99800a.png)


1. Converta o arquivo em um hex dump na linha de comando usando a opção `xxd -p`.

1. Faça upload dos arquivos hex dump no Aurora PostgreSQL-Compatible usando a opção `\copy` e, em seguida, decodifique os arquivos hex dump em binário.

1. Codifique os dados binários para que sejam retornados como `TEXT`.

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

**Serviços da AWS**
+ O [Amazon Aurora Edição Compatível com PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) é um mecanismo de banco de dados relacional totalmente gerenciado que ajuda você a configurar, operar e escalar as implantações de PostgreSQL.
+ A [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) é uma ferramenta de código aberto que permite que você interaja com serviços da AWS usando comandos no shell da linha de comando.

**Outras ferramentas**
+ O [pgAdmin4](https://www.pgadmin.org/) é uma plataforma de administração e desenvolvimento de código aberto para o PostgreSQL. O pgAdmin4 pode ser usado em Linux, Unix, mac OS e Windows para gerenciar o PostgreSQL.  

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

### Abordagem 1: importar dados do Amazon S3 para o Aurora PostgreSQL-Compatible
<a name="approach-1-import-data-from-amazon-s3-to-aurora-postgresql-compatible"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute uma EC2 instância. | Para obter instruções sobre como iniciar uma instância, consulte [Executar sua instância](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html). | DBA | 
| Instale a ferramenta pgAdmin do cliente PostgreSQL. | Baixe e instale [pgAdmin](https://www.pgadmin.org/download/). | DBA | 
| Crie uma política do IAM. | Crie uma política do AWS Identity and Access Management (IAM) chamada `aurora-s3-access-pol` que concede acesso ao bucket do S3 onde os arquivos serão armazenados. Use o código a seguir, `<bucket-name>` para substituir pelo nome do bucket do 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 | 
| Crie um perfil do IAM para importação de objetos do Amazon S3 para o Aurora PostgreSQL-Compatible. | Use o código a seguir para criar uma função do IAM chamada `aurora-s3-import-role` com a relação de [AssumeRole](https://docs.amazonaws.cn/en_us/STS/latest/APIReference/API_AssumeRole.html)confiança. `AssumeRole`permite que a Aurora acesse outros serviços da AWS em seu nome.<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 | 
| Associe o perfil do IAM ao cluster. | Para associar o perfil do IAM ao cluster do banco de dados Aurora PostgreSQL-Compatible, execute o comando da AWS CLI a seguir. Altere `<Account-ID>` para o ID da conta da AWS que hospeda o banco de dados Aurora PostgreSQL-Compatible. Isso permite que o banco de dados Aurora PostgreSQL-Compatible acesse o bucket do 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 | 
| Faça o upload do exemplo para o Amazon S3. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA, proprietário do aplicativo | 
| Implante a função personalizada. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | Proprietário do aplicativo, DBA | 
| Execute a função personalizada para importar os dados para o banco de dados. | Execute o comando SQL a seguir, substituindo os itens entre parênteses angulares pelos valores apropriados.<pre>select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre><br />Substitua os itens entre parênteses angulares pelos valores apropriados, conforme mostrado no exemplo a seguir, antes de executar o comando.<pre>Select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre><br />O comando carrega o arquivo do Amazon S3 e retorna o resultado como `TEXT`. | Proprietário do aplicativo, DBA | 

### Abordagem 2: converter o arquivo de modelo em um hex dump em um sistema Linux local
<a name="approach-2-convert-the-template-file-into-a-hex-dump-in-a-local-linux-system"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Converta o arquivo do modelo em um hex dump. | O utilitário Hexdump exibe o conteúdo dos arquivos binários em hexadecimal, decimal, octal ou ASCII. O comando `hexdump` faz parte do pacote `util-linux` e vem pré-instalado nas distribuições Linux. O pacote Hexdump RPM também faz parte do Amazon Linux 2. (: O suporte do Amazon Linux 2 está chegando ao fim. Para obter mais informações, consulte o [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).)Para converter o conteúdo do arquivo em um hex dump, execute o seguinte comando shell.<pre>xxd -p </path/file.vm> | tr -d '\n' > </path/file.hex></pre><br />Substitua o caminho e o arquivo pelos valores apropriados, conforme mostrado no exemplo a seguir.<pre>xxd -p employee.salary.event.notification.email.vm | tr -d '\n' > employee.salary.event.notification.email.vm.hex</pre> | DBA | 
| Carregue o arquivo hexdump no esquema do banco de dados. | Use os comandos a seguir para carregar o arquivo hexdump no banco de dados Aurora PostgreSQL-Compatible.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA | 

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

**Referências**
+ [Uso do banco de dados PostgreSQL como origem para o AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [Manual de migração do Oracle Database 19c para o Amazon Aurora com compatibilidade com PostgreSQL (12.4)](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook-12.4.pdf)
+ [Criação de políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)
+ [Associar um perfil do IAM a um cluster de banco de dados do Amazon Aurora MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html)
+ [pgAdmin](https://www.pgadmin.org/)

**Tutoriais**
+ [Conceitos básicos do Amazon RDS](https://aws.amazon.com/rds/getting-started/)
+ [Migre do Oracle para o Amazon Aurora](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)

## Mais informações
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-additional"></a>

**função personalizada load\_file\_into\_clob**

```
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$;
```

**Modelo de 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.
```