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
Bhanu Ganesh Gudivada dan Jeevan Shetty, Amazon Web Services
Ringkasan
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_s3fungsi ekstensi dengan- aws_s3opsi 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
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 - . 
Batasan
- Untuk tipe - TEXTdata, string karakter terpanjang yang dapat disimpan adalah sekitar 1 GB.
Versi produk
Arsitektur
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.

- File ditransfer ke bucket S3 pementasan. 
- File diunggah ke database yang kompatibel dengan Amazon Aurora PostgreSQL. 
- Menggunakan klien pgAdmin, - load_file_into_clobfungsi kustom diterapkan ke database Aurora.
- Fungsi kustom digunakan secara internal - table_import_from_s3dengan file_encoding. Output dari fungsi diperoleh dengan menggunakan- array_to_stringdan- array_aggsebagai- TEXToutput.
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

- Konversi file ke hex dump di baris perintah dengan menggunakan opsi. - xxd -p
- Unggah file hex dump ke Aurora PostgreSQL yang kompatibel dengan menggunakan - \copyopsi, dan kemudian memecahkan kode file hex dump ke biner.
- Mengkodekan data biner untuk kembali sebagai - TEXT.
Alat
Layanan AWS
- Amazon Aurora PostgreSQL Compatible Edition 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) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda. 
Alat lainnya
- pGADmin4 - adalah platform administrasi dan pengembangan open source untuk PostgreSQL. pGADmin4 dapat digunakan di Linux, Unix, mac OS, dan Windows untuk mengelola PostgreSQL. 
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
|---|---|---|
| Luncurkan sebuah EC2 instance. | Untuk petunjuk tentang meluncurkan instance, lihat Meluncurkan instance Anda. | DBA | 
| Instal alat pgAdmin klien PostgreSQL. | Unduh dan instal pgAdmin. | DBA | 
| Buat kebijakan IAM. | Buat kebijakan AWS Identity and Access Management (IAM) bernama  
 | DBA | 
| Buat peran IAM untuk impor objek dari Amazon S3 ke Aurora PostgreSQL yang kompatibel. | Gunakan kode berikut untuk membuat peran IAM bernama  
 | DBA | 
| Kaitkan peran IAM ke cluster. | Untuk mengaitkan peran IAM dengan cluster database yang kompatibel dengan Aurora PostgreSQL, jalankan perintah AWS CLI berikut. Ubah  
 | DBA | 
| Unggah contoh ke Amazon S3. | 
 | DBA, Pemilik aplikasi | 
| Menyebarkan fungsi kustom. | 
 | 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. 
 Ganti item dalam kurung sudut dengan nilai yang sesuai, seperti yang ditunjukkan pada contoh berikut, sebelum menjalankan perintah. 
 Perintah memuat file dari Amazon S3 dan mengembalikan output sebagai file.  | Pemilik aplikasi, DBA | 
| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
|---|---|---|
| Ubah file template menjadi hex dump. | catatanUtilitas Hexdump menampilkan isi file biner dalam heksadesimal, desimal, oktal, atau ASCII.  Untuk mengonversi isi file menjadi hex dump, jalankan perintah shell berikut. 
 Ganti path dan file dengan nilai yang sesuai, seperti yang ditunjukkan pada contoh berikut. 
 | DBA | 
| Muat file hexdump ke dalam skema database. | Gunakan perintah berikut untuk memuat file hexdump ke dalam database Aurora PostgreSQL yang kompatibel. 
 | DBA | 
Sumber daya terkait
Referensi
Tutorial
Informasi tambahan
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.