

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Muat file BLOB ke TEXT dengan menggunakan pengkodean file di Aurora PostgreSQL yang kompatibel
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible"></a>

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

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

Seringkali selama migrasi, ada kasus di mana Anda harus memproses data tidak terstruktur dan terstruktur yang dimuat dari file pada sistem file lokal. Data mungkin juga berada dalam kumpulan karakter yang berbeda dari kumpulan karakter database.

File-file ini menyimpan jenis data berikut:
+ **Metadata** — Data ini menjelaskan struktur file.
+ **Data semi-terstruktur** — Ini adalah string tekstual dalam format tertentu, seperti JSON atau XHTML. Anda mungkin dapat membuat pernyataan tentang data tersebut, seperti “akan selalu dimulai dengan '<'” atau “tidak mengandung karakter baris baru.”
+ **Teks lengkap** — Data ini biasanya berisi semua jenis karakter, termasuk karakter baris baru dan kutipan. Mungkin juga terdiri dari karakter multibyte di UTF-8.
+ **Data biner** — Data ini mungkin berisi byte atau kombinasi byte termasuk, nol dan penanda. end-of-file

Memuat campuran jenis data ini bisa menjadi tantangan.

Pola ini dapat digunakan dengan database Oracle lokal, database Oracle yang ada di instans Amazon Elastic Compute Cloud (Amazon) di Amazon Web Services (AWS EC2) Cloud, dan Amazon Relational Database Service (Amazon RDS) untuk database Oracle. Sebagai contoh, pola ini menggunakan Amazon Aurora PostgreSQL Compatible Edition.

Di Oracle Database, dengan bantuan pointer `BFILE` (file biner), `DBMS_LOB` paket, dan fungsi sistem Oracle, Anda dapat memuat dari file dan mengkonversi ke CLOB dengan pengkodean karakter. Karena PostgreSQL tidak mendukung tipe data BLOB saat bermigrasi ke database Amazon Aurora PostgreSQL Edisi yang kompatibel dengan PostgreSQL, fungsi ini harus dikonversi ke skrip yang kompatibel dengan PostgreSQL.

Pola ini menyediakan dua pendekatan untuk memuat file ke dalam kolom database tunggal dalam database yang kompatibel dengan Amazon Aurora PostgreSQL:
+ Pendekatan 1 - Anda mengimpor data dari bucket Amazon Simple Storage Service (Amazon S3) Simple Storage S3) dengan menggunakan `table_import_from_s3` fungsi ekstensi dengan `aws_s3` opsi encode.
+ Pendekatan 2 — Anda menyandikan heksadesimal di luar database, dan kemudian Anda memecahkan kode untuk melihat di dalam database. `TEXT`

Sebaiknya gunakan Pendekatan 1 karena Aurora PostgreSQL kompatibel memiliki integrasi langsung dengan ekstensi. `aws_s3`

Pola ini menggunakan contoh memuat file datar yang berisi template email, yang memiliki karakter multibyte dan format berbeda, ke dalam database Amazon Aurora PostgreSQL yang kompatibel.

## Prasyarat dan batasan
<a name="load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible-prereqs"></a>

**Prasyarat**
+ Akun AWS yang aktif
+ Instans Amazon RDS atau instans yang kompatibel dengan Aurora PostgreSQL
+ Pemahaman dasar SQL dan Relational Database Management System (RDBMS)
+ Bucket Amazon Simple Storage Service (Amazon S3).
+ Pengetahuan tentang fungsi sistem di Oracle dan PostgreSQL
+ RPM Package HexDump -XXD-0.1.1 (disertakan dengan Amazon Linux 2)
**catatan**  
Amazon Linux 2 mendekati akhir dukungan. Untuk informasi selengkapnya, lihat [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).

**Batasan**
+ Untuk tipe `TEXT` data, string karakter terpanjang yang dapat disimpan adalah sekitar 1 GB.

**Versi produk**
+ [Aurora mendukung versi PostgreSQL yang tercantum dalam pembaruan Amazon Aurora PostgreSQL.](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/AuroraPostgreSQL.Updates.html)

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

**Tumpukan teknologi target**
+ Kompatibel dengan Aurora PostgreSQL

**Arsitektur target**

*Pendekatan 1 - Menggunakan aws\_s3.table\_import\_from\_s3*

Dari server lokal, file yang berisi templat email dengan karakter multibyte dan pemformatan kustom ditransfer ke Amazon S3. Fungsi database kustom yang disediakan oleh pola ini menggunakan `aws_s3.table_import_from_s3` fungsi dengan `file_encoding` untuk memuat file ke dalam database dan mengembalikan hasil query sebagai tipe `TEXT` data.

![Proses empat langkah dari server lokal ke output TEXT dari database Aurora.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/9c46b385-e8a0-4e50-b856-d522c44d79e3.png)


1. File ditransfer ke bucket S3 pementasan.

1. File diunggah ke database yang kompatibel dengan Amazon Aurora PostgreSQL.

1. Menggunakan klien pgAdmin, `load_file_into_clob` fungsi kustom diterapkan ke database Aurora.

1. Fungsi kustom digunakan secara internal `table_import_from_s3` dengan file\_encoding. Output dari fungsi diperoleh dengan menggunakan `array_to_string` dan `array_agg` sebagai `TEXT` output.

*Pendekatan 2 - Pengkodean ke heksadesimal di luar database dan decoding untuk melihat TEXT di dalam database*

File dari server lokal atau sistem file lokal diubah menjadi hex dump. Kemudian file tersebut diimpor ke PostgreSQL sebagai bidang. `TEXT`

![Proses tiga langkah menggunakan Hex dump.](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/cbf63cac-dcea-4e18-ab4f-c4f6296f60e7/images/563038ca-f890-4874-85df-d0f82d99800a.png)


1. Konversi file ke hex dump di baris perintah dengan menggunakan opsi. `xxd -p`

1. Unggah file hex dump ke Aurora PostgreSQL yang kompatibel dengan menggunakan `\copy` opsi, dan kemudian memecahkan kode file hex dump ke biner.

1. Mengkodekan data biner untuk kembali sebagai`TEXT`.

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

**Layanan AWS**
+ [Amazon Aurora PostgreSQL Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) adalah mesin database relasional yang dikelola sepenuhnya dan sesuai dengan ACID yang membantu Anda mengatur, mengoperasikan, dan menskalakan penerapan PostgreSQL.
+ [AWS Command Line Interface (AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.

**Alat lainnya**
+ [pGADmin4](https://www.pgadmin.org/) adalah platform administrasi dan pengembangan open source untuk PostgreSQL. pGADmin4 dapat digunakan di Linux, Unix, mac OS, dan Windows untuk mengelola PostgreSQL.  

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

### Pendekatan 1: Impor data dari Amazon S3 ke Aurora PostgreSQL yang kompatibel
<a name="approach-1-import-data-from-amazon-s3-to-aurora-postgresql-compatible"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Luncurkan sebuah EC2 instance. | Untuk petunjuk tentang meluncurkan instance, lihat [Meluncurkan instance Anda](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html). | DBA | 
| Instal alat pgAdmin klien PostgreSQL. | Unduh dan instal [pgAdmin.](https://www.pgadmin.org/download/) | DBA | 
| Buat kebijakan IAM. | Buat kebijakan AWS Identity and Access Management (IAM) bernama `aurora-s3-access-pol` yang memberikan akses ke bucket S3 tempat file akan disimpan. Gunakan kode berikut, ganti `<bucket-name>` dengan nama bucket S3 Anda.<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 | 
| Buat peran IAM untuk impor objek dari Amazon S3 ke Aurora PostgreSQL yang kompatibel. | Gunakan kode berikut untuk membuat peran IAM bernama `aurora-s3-import-role` dengan hubungan [AssumeRole](https://docs.amazonaws.cn/en_us/STS/latest/APIReference/API_AssumeRole.html)kepercayaan. `AssumeRole`memungkinkan Aurora mengakses layanan AWS lainnya atas nama Anda.<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 | 
| Kaitkan peran IAM ke cluster. | Untuk mengaitkan peran IAM dengan cluster database yang kompatibel dengan Aurora PostgreSQL, jalankan perintah AWS CLI berikut. Ubah `<Account-ID>` ke ID akun AWS yang menghosting database yang kompatibel dengan Aurora PostgreSQL. Ini memungkinkan database yang kompatibel dengan Aurora PostgreSQL untuk mengakses 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 | 
| Unggah contoh ke Amazon S3. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA, Pemilik aplikasi | 
| Menyebarkan fungsi kustom. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | Pemilik aplikasi, DBA | 
| Jalankan fungsi kustom untuk mengimpor data ke dalam database. | Jalankan perintah SQL berikut, ganti item dalam kurung sudut dengan nilai yang sesuai.<pre>select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre><br />Ganti item dalam kurung sudut dengan nilai yang sesuai, seperti yang ditunjukkan pada contoh berikut, sebelum menjalankan perintah.<pre>Select load_file_into_clob('aws-s3-import-test'::text,'us-west-1'::text,'employee.salary.event.notification.email.vm'::text);</pre><br />Perintah memuat file dari Amazon S3 dan mengembalikan output sebagai file. `TEXT` | Pemilik aplikasi, DBA | 

### Pendekatan 2: Ubah file template menjadi hex dump di sistem Linux lokal
<a name="approach-2-convert-the-template-file-into-a-hex-dump-in-a-local-linux-system"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ubah file template menjadi hex dump. | Utilitas Hexdump menampilkan isi file biner dalam heksadesimal, desimal, oktal, atau ASCII. `hexdump`Perintah adalah bagian dari `util-linux` paket dan sudah diinstal sebelumnya di distribusi Linux. Paket Hexdump RPM adalah bagian dari Amazon Linux 2 juga. (: Amazon Linux 2 mendekati akhir dukungan. Untuk informasi selengkapnya, lihat [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).)Untuk mengonversi isi file menjadi hex dump, jalankan perintah shell berikut.<pre>xxd -p </path/file.vm> | tr -d '\n' > </path/file.hex></pre><br />Ganti path dan file dengan nilai yang sesuai, seperti yang ditunjukkan pada contoh berikut.<pre>xxd -p employee.salary.event.notification.email.vm | tr -d '\n' > employee.salary.event.notification.email.vm.hex</pre> | DBA | 
| Muat file hexdump ke dalam skema database. | Gunakan perintah berikut untuk memuat file hexdump ke dalam database Aurora PostgreSQL yang kompatibel.[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/load-blob-files-into-text-by-using-file-encoding-in-aurora-postgresql-compatible.html) | DBA | 

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

**Referensi**
+ [Menggunakan database PostgreSQL sebagai target AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.PostgreSQL.html)
+ [Oracle Database 19c ke Amazon Aurora dengan PostgreSQL Kompatibilitas (12.4) Playbook Migrasi](https://d1.awsstatic.com/whitepapers/Migration/oracle-database-amazon-aurora-postgresql-migration-playbook-12.4.pdf)
+ [Membuat kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)
+ [Mengaitkan peran IAM dengan kluster DB MySQL Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html)
+ [pgAdmin](https://www.pgadmin.org/)

**Tutorial**
+ [Memulai dengan Amazon RDS](https://aws.amazon.com/rds/getting-started/)
+ [Bermigrasi dari Oracle ke Amazon Aurora](https://aws.amazon.com/getting-started/projects/migrate-oracle-to-amazon-aurora/)

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

**load\_file\_into\_clob fungsi kustom**

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

**Template 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.
```