

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

# Mengimpor data ke PostgreSQL di Amazon RDS
<a name="PostgreSQL.Procedural.Importing"></a>

Misalkan Anda memiliki deployment PostgreSQL yang ingin Anda pindahkan ke Amazon RDS. Kompleksitas tugas Anda bergantung pada ukuran basis data Anda dan jenis objek basis data yang Anda transfer. Misalnya, pertimbangkan basis data yang berisi set data dalam urutan gigabyte, bersama dengan prosedur yang tersimpan dan pemicu. Basis data seperti itu akan menjadi lebih rumit dibandingkan basis data sederhana dengan hanya beberapa megabyte data uji dan tanpa pemicu atau prosedur tersimpan. 

Kami menyarankan Anda untuk menggunakan alat migrasi basis data PostgreSQL native dalam kondisi berikut:
+ Anda memiliki migrasi yang homogen, yaitu Anda bermigrasi dari basis data dengan mesin basis data yang sama dengan basis data target.
+ Anda memigrasikan seluruh basis data.
+ Alat native memungkinkan Anda untuk memigrasi sistem Anda dengan waktu henti minimal.

Dalam kebanyakan kasus lain, melakukan migrasi AWS database menggunakan Database Migration Service (AWS DMS) adalah pendekatan terbaik. AWS DMS dapat memigrasikan database tanpa downtime dan, untuk banyak mesin database, melanjutkan replikasi yang sedang berlangsung sampai Anda siap untuk beralih ke database target. Anda dapat bermigrasi ke mesin database yang sama atau mesin database yang berbeda menggunakan AWS DMS. Jika Anda bermigrasi ke mesin database yang berbeda dari database sumber Anda, Anda dapat menggunakan AWS Schema Conversion Tool (AWS SCT). Anda gunakan AWS SCT untuk memigrasikan objek skema yang tidak dimigrasikan oleh. AWS DMS Untuk informasi lebih lanjut tentang AWS DMS, lihat [Apa itu? AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html)

Ubah grup parameter DB Anda untuk menyertakan pengaturan berikut *hanya untuk impor Anda*. Selain itu, uji juga pengaturan parameter guna menemukan pengaturan yang paling efisien untuk instans DB Anda. Anda juga perlu mengembalikan parameter ini ke nilai produksi setelah pengimporan selesai.

Ubah pengaturan instans DB Anda sebagai berikut:
+ Nonaktifkan pencadangan instans DB (ubah backup\$1retention menjadi 0).
+ Nonaktifkan Multi-AZ.

Ubah grup parameter DB Anda untuk menyertakan pengaturan berikut. Anda sebaiknya hanya menggunakan pengaturan ini saat mengimpor data. Selain itu, uji juga pengaturan parameter guna menemukan pengaturan yang paling efisien untuk instans DB Anda. Anda juga perlu mengembalikan parameter ini ke nilai produksi setelah pengimporan selesai.


| Parameter | Nilai yang disarankan saat mengimpor | Deskripsi | 
| --- | --- | --- | 
|  `maintenance_work_mem`  |  524288, 1048576, 2097152 atau 4194304 (dalam KB). Pengaturan ini setara dengan 512 MB, 1 GB, 2 GB, dan 4 GB.  |  Nilai untuk pengaturan ini bergantung pada ukuran host Anda. Parameter ini digunakan selama pernyataan CREATE INDEX dan setiap perintah paralel dapat menggunakan memori sebanyak ini. Hitung nilai terbaik agar Anda tidak mengatur nilai ini terlalu tinggi dan kehabisan memori.  | 
|  `max_wal_size`  |  256 (untuk versi 9.6), 4096 (untuk versi 10 dan yang lebih tinggi)  |  Ukuran maksimum untuk membiarkan WAL tumbuh selama pemeriksaan otomatis. Meningkatkan parameter ini dapat meningkatkan jumlah waktu yang dibutuhkan untuk pemulihan setelah crash. Parameter ini menggantikan `checkpoint_segments` untuk PostgreSQL 9.6 dan yang lebih baru. Untuk PostgreSQL versi 9.6, nilai ini dalam unit 16 MB. Untuk versi yang lebih baru, nilainya dalam unit 1 MB. Misalnya, dalam versi 9.6, 128 berarti 128 potongan yang masing-masing berukuran 16 MB. Misalnya, dalam versi 12.4, 2048 berarti 2048 potongan yang masing-masing berukuran 1 MB.  | 
|  `checkpoint_timeout`  |  1800  |  Nilai untuk pengaturan ini memungkinkan rotasi WAL yang lebih jarang.  | 
|  `synchronous_commit`  |  Mati  |  Nonaktifkan pengaturan ini untuk mempercepat penulisan. Menonaktifkan parameter ini dapat meningkatkan risiko kehilangan data jika terjadi crash pada server (jangan menonaktifkan FSYNC).  | 
|  `wal_buffers`  |   8192  |  Ini adalah nilai dalam unit 8 KB. Ini juga membantu kecepatan pembuatan WAL Anda  | 
|  `autovacuum`  |  0  |  Nonaktifkan parameter vakum otomatis PostgreSQL saat Anda memuat data agar sumber daya tidak digunakan  | 

Gunakan perintah `pg_dump -Fc` (terkompresi) atau `pg_restore -j` (paralel) dengan pengaturan ini.

**catatan**  
Perintah PostgreSQL `pg_dumpall` memerlukan izin super\$1user yang tidak diberikan saat Anda membuat instans DB, sehingga tidak dapat digunakan untuk mengimpor data.

**Topics**
+ [Mengimpor basis data PostgreSQL dari instans Amazon EC2](PostgreSQL.Procedural.Importing.EC2.md)
+ [Menggunakan perintah \$1copy untuk mengimpor data ke tabel di instans DB PostgreSQL](PostgreSQL.Procedural.Importing.Copy.md)
+ [Mengimpor data dari Amazon S3 ke instans DB RDS for PostgreSQL](USER_PostgreSQL.S3Import.md)
+ [Mengangkut basis data PostgreSQL antara instans DB](PostgreSQL.TransportableDB.md)

# Mengimpor basis data PostgreSQL dari instans Amazon EC2
<a name="PostgreSQL.Procedural.Importing.EC2"></a>

Jika Anda memiliki data di server PostgreSQL pada instans Amazon EC2 dan ingin memindahkannya ke instans PostgreSQL DB, Anda dapat mengikuti proses ini untuk memigrasikan data. 

1. Buat berkas menggunakan pg\$1dump yang berisi data yang akan dimuat

1. Buat instans DB target

1. Gunakan *psql* untuk membuat basis data pada instans DB dan muat data

1. Buat snapshot DB dari instans DB

Bagian berikut memberikan rincian lebih lanjut pada setiap langkah yang tercantum di atas.

## Langkah 1: Buat file menggunakan pg\$1dump yang berisi data yang akan dimuat
<a name="PostgreSQL.Procedural.Importing.EC2.Step1"></a>

Utilitas `pg_dump` menggunakan perintah COPY untuk membuat skema dan dump data dari basis data PostgreSQL. Skrip dump yang dibuat oleh `pg_dump` memuat data ke dalam basis data dengan nama yang sama dan membuat ulang tabel, indeks, dan kunci asing. Anda dapat menggunakan perintah `pg_restore` dan parameter `-d` untuk memulihkan data ke basis data dengan nama yang berbeda.

Sebelum Anda membuat dump data, Anda harus melakukan kueri tabel yang akan di-dump untuk mendapatkan jumlah baris sehingga Anda dapat mengonfirmasi jumlah pada instans DB target.

 Perintah berikut membuat file dump bernama mydb2dump.sql untuk basis data bernama mydb2.

```
prompt>pg_dump dbname=mydb2 -f mydb2dump.sql 
```

## Langkah 2: Buat instans DB target
<a name="PostgreSQL.Procedural.Importing.EC2.Step2"></a>

Buat instans DB PostgreSQL target menggunakan konsol Amazon RDS, AWS CLI, atau API. Buat instans dengan pengaturan retensi cadangan yang diatur ke 0 dan nonaktifkan Multi-AZ. Hal ini akan mempercepat impor data. Anda harus membuat basis data pada instans tersebut sebelum data dapat di-dump. Basis data tersebut bisa memiliki nama yang sama dengan basis data yang berisi data yang di-dump. Anda juga dapat membuat basis data dengan nama berbeda. Dalam kasus ini, gunakan perintah `pg_restore` dan parameter `-d` untuk memulihkan data ke basis data yang baru diberi nama.

Misalnya, perintah berikut dapat digunakan untuk mengeluarkan, memulihkan, dan mengubah nama basis data.

```
pg_dump -Fc -v -h [endpoint of instance] -U [master username] [database] > [database].dump
createdb [new database name]
pg_restore -v -h [endpoint of instance] -U [master username] -d [new database name] [database].dump
```

## Langkah 3: Gunakan psql untuk membuat basis data pada instans DB dan muat data
<a name="PostgreSQL.Procedural.Importing.EC2.Step3"></a>

Anda dapat menggunakan koneksi yang sama yang Anda gunakan untuk menjalankan perintah pg\$1dump untuk terhubung ke instans DB target dan membuat ulang basis data. Menggunakan *psql*, Anda bisa menggunakan nama pengguna master dan kata sandi master untuk membuat basis data pada instans DB

Contoh berikut menggunakan *psql* dan file dump bernama mydb2dump.sql untuk membuat basis data bernama mydb2 di instans DB PostgreSQL bernama mypginstance:

Untuk Linux, macOS, atau Unix:

```
psql \
   -f mydb2dump.sql \
   --host mypginstance.555555555555.aws-region.rds.amazonaws.com \
   --port 8199 \
   --username myawsuser \
   --password password \
   --dbname mydb2
```

Untuk Windows:

```
psql ^
   -f mydb2dump.sql ^
   --host mypginstance.555555555555.aws-region.rds.amazonaws.com ^
   --port 8199 ^
   --username myawsuser ^
   --password password ^
   --dbname mydb2
```

**catatan**  
Tentukan kata sandi selain perintah yang ditampilkan di sini sebagai praktik terbaik keamanan.

## Langkah 4: Buat snapshot DB dari instans DB
<a name="PostgreSQL.Procedural.Importing.EC2.Step4"></a>

Setelah Anda memverifikasi bahwa data telah dimuat ke dalam instans DB Anda, kami sarankan Anda membuat snapshot DB dari instans DB PostgreSQL target. Snapshot DB adalah cadangan lengkap instans DB Anda yang dapat digunakan untuk memulihkan instans DB Anda ke status yang diketahui. Dengan snapshot DB yang diambil segera setelah pemuatan, Anda tidak perlu memuat data lagi jika terjadi hal yang tidak diinginkan. Anda juga dapat menggunakan snapshot tersebut untuk memulai instans DB baru. Untuk informasi selengkapnya tentang cara membuat snapshot DB secara manual, lihat [Membuat snapshot DB untuk instans DB AZ tunggal untuk Amazon RDS](USER_CreateSnapshot.md).

# Menggunakan perintah \$1copy untuk mengimpor data ke tabel di instans DB PostgreSQL
<a name="PostgreSQL.Procedural.Importing.Copy"></a>

Perintah `\copy` PostgreSQL adalah perintah meta yang tersedia dari alat klien interaktif `psql`. Anda dapat menggunakan `\copy` untuk mengimpor data ke tabel di instans DB RDS for PostgreSQL. Untuk menggunakan perintah `\copy`, Anda harus membuat struktur tabel pada instans DB target terlebih dahulu agar `\copy` memiliki tujuan untuk salinan data.

Anda dapat menggunakan `\copy` untuk memuat data dari file nilai yang dipisahkan koma (CSV), seperti file yang telah diekspor dan disimpan ke workstation klien Anda.

Untuk mengimpor data CSV ke instans DB RDS for PostgreSQL target, pertama-tama sambungkan ke instans DB target menggunakan `psql`. 

```
psql --host=db-instance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=target-db
```

Anda kemudian menjalankan perintah `\copy` dengan parameter berikut untuk mengidentifikasi target untuk data dan formatnya.
+ `target_table` – Nama tabel yang akan menerima data yang disalin dari file CSV.
+ `column_list` – Spesifikasi kolom untuk tabel. 
+ `'filename'` – Jalur lengkap ke file CSV di workstation lokal Anda. 

```
 \copy target_table from '/path/to/local/filename.csv' WITH DELIMITER ',' CSV;
```

Jika file CSV Anda memiliki informasi judul kolom, Anda dapat menggunakan versi perintah dan parameter ini.

```
\copy target_table (column-1, column-2, column-3, ...)
    from '/path/to/local/filename.csv' WITH DELIMITER ',' CSV HEADER;
```

 Jika perintah `\copy` gagal, PostgreSQL mengeluarkan pesan kesalahan.

Membuat instans DB baru di lingkungan Database Preview menggunakan perintah `psql` dengan perintah meta `\copy` seperti yang ditunjukkan pada contoh berikut. Contoh ini menggunakan *source-table* sebagai nama tabel sumber, *source-table.csv* sebagai file .csv, dan *target-db* sebagai basis data target:

Untuk Linux, macOS, atau Unix:

```
$psql target-db \
    -U <admin user> \
    -p <port> \
    -h <DB instance name> \
    -c "\copy source-table from 'source-table.csv' with DELIMITER ','"
```

Untuk Windows:

```
$psql target-db ^
    -U <admin user> ^
    -p <port> ^
    -h <DB instance name> ^
    -c "\copy source-table from 'source-table.csv' with DELIMITER ','"
```

Untuk detail lengkap tentang perintah `\copy`, lihat halaman [psql](http://www.postgresql.org/docs/current/static/app-psql.html) dalam dokumentasi PostgreSQL, di bagian *Meta-Commands*. 

# Mengimpor data dari Amazon S3 ke instans DB RDS for PostgreSQL
<a name="USER_PostgreSQL.S3Import"></a>

Anda dapat mengimpor data yang telah disimpan menggunakan Amazon Simple Storage Service ke dalam tabel pada instans RDS for PostgreSQL. Untuk melakukannya, instal ekstensi RDS for PostgreSQL `aws_s3` terlebih dahulu. Ekstensi ini menyediakan fungsi yang Anda gunakan untuk mengimpor data dari bucket Amazon S3. *Bucket* adalah kontainer Amazon S3 untuk objek dan file. Data dapat berada dalam file nilai yang dipisahkan koma (CSV), file teks, atau file terkompresi (gzip). Berikut ini, Anda dapat mempelajari cara menginstal ekstensi dan cara mengimpor data dari Amazon S3 ke dalam tabel. 

Basis data Anda harus menjalankan PostgreSQL versi 10.7 atau yang lebih tinggi untuk mengimpor dari Amazon S3 ke RDS for PostgreSQL. 

Jika tidak memiliki data yang tersimpan di Amazon S3, Anda harus terlebih dahulu membuat bucket dan menyimpan data. Untuk informasi selengkapnya, lihat topik berikut di *Panduan Pengguna Amazon Simple Storage Service*. 
+ [Membuat bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#creating-bucket)
+ [Menambahkan objek ke bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#uploading-an-object-bucket) 

Impor lintas akun dari Amazon S3 didukung. Untuk informasi selengkapnya, lihat [ Memberikan izin lintas akun](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-walkthroughs-managing-access-example2.html) di *Panduan Pengguna Amazon Simple Storage Service User Guide*.

Anda dapat menggunakan kunci yang dikelola pelanggan untuk enkripsi saat mengimpor data dari S3. Untuk informasi selengkapnya, lihat [ kunci KMS yang disimpan di AWS KMS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html) dalam *Panduan Pengguna Amazon Simple Storage Service*.

**Topics**
+ [Menginstal ekstensi aws\$1s3](USER_PostgreSQL.S3Import.InstallExtension.md)
+ [Ikhtisar impor data dari data Amazon S3](USER_PostgreSQL.S3Import.Overview.md)
+ [Menyiapkan akses ke bucket Amazon S3](USER_PostgreSQL.S3Import.AccessPermission.md)
+ [Mengimpor data dari Amazon S3 ke](USER_PostgreSQL.S3Import.FileFormats.md)
+ [Referensi fungsi](USER_PostgreSQL.S3Import.Reference.md)

# Menginstal ekstensi aws\$1s3
<a name="USER_PostgreSQL.S3Import.InstallExtension"></a>

Sebelum Anda dapat menggunakan Amazon S3 dengan Anda perlu menginstal ekstensi. `aws_s3` Ekstensi ini menyediakan fungsi untuk mengimpor data dari Amazon S3. Ini juga menyediakan fungsi untuk mengekspor data dari ke SQL bucket Amazon S3. Untuk informasi selengkapnya, lihat [Mengekspor data dari instans DB RDS for PostgreSQL ke Amazon S3](postgresql-s3-export.md). Ekstensi `aws_s3` bergantung pada beberapa fungsi pembantu dalam ekstensi `aws_commons`, yang diinstal secara otomatis bila diperlukan. 

**Untuk menginstal ekstensi `aws_s3`**

1. Gunakan psql (ataupgAdmin) untuk terhubung ke sebagai pengguna yang memiliki hak SQL istimewa. `rds_superuser` Jika Anda menyimpan nama default selama proses penyiapan, Anda terhubung sebagai `postgres`.

   ```
   psql --host=111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. Untuk menginstal ekstensi, jalankan perintah berikut. 

   ```
   postgres=> CREATE EXTENSION aws_s3 CASCADE;
   NOTICE: installing required extension "aws_commons"
   CREATE EXTENSION
   ```

1. Untuk memverifikasi bahwa ekstensi sudah diinstal, Anda dapat menggunakan metacommand psql `\dx`.

   ```
   postgres=> \dx
          List of installed extensions
       Name     | Version |   Schema   |                 Description
   -------------+---------+------------+---------------------------------------------
    aws_commons | 1.2     | public     | Common data types across AWS services
    aws_s3      | 1.1     | public     | AWS S3 extension for importing data from S3
    plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
   (3 rows)
   ```

Fungsi untuk mengimpor data dari Amazon S3 dan mengekspor data ke Amazon S3 kini dapat digunakan.

# Ikhtisar impor data dari data Amazon S3
<a name="USER_PostgreSQL.S3Import.Overview"></a>

**Untuk mengimpor data S3 ke Amazon RDS**

Pertama, kumpulkan detail yang perlu Anda suplai ke fungsi tersebut. Ini termasuk nama tabel pada instance klaster dan nama bucket, jalur file, jenis file, dan tempat penyimpanan data Amazon S3. Wilayah AWS Untuk informasi selengkapnya, buka [Melihat objek](https://docs.aws.amazon.com/AmazonS3/latest/userguide/OpeningAnObject.html) di *Panduan Pengguna Amazon Simple Storage Service*.
**catatan**  
Impor data multi bagian dari Amazon S3 saat ini tidak didukung.

1. Dapatkan nama tabel di mana fungsi `aws_s3.table_import_from_s3` adalah untuk mengimpor data. Sebagai contoh, perintah berikut membuat tabel `t1` yang dapat digunakan di langkah selanjutnya. 

   ```
   postgres=> CREATE TABLE t1 
       (col1 varchar(80), 
       col2 varchar(80), 
       col3 varchar(80));
   ```

1. Dapatkan detail tentang bucket Amazon S3 dan data yang akan diimpor. **Untuk melakukan ini, buka konsol Amazon S3 di [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/), dan pilih Bucket.** Temukan bucket yang berisi data Anda dalam daftar. Pilih bucket, buka halaman ikhtisar Object, lalu pilih Properti.

   Catat nama bucket, path Wilayah AWS, dan jenis file. Anda memerlukan Amazon Resource Name (ARN) nanti, untuk menyiapkan akses ke Amazon S3 melalui peran IAM. Untuk informasi selengkapnya, lihat [Menyiapkan akses ke bucket Amazon S3](USER_PostgreSQL.S3Import.AccessPermission.md). Bagian berikut menunjukkan satu contoh.   
![\[Gambar objek file dalam bucket Amazon S3.\]](http://docs.aws.amazon.com/id_id/AmazonRDS/latest/UserGuide/images/aws_s3_import-export_s3_bucket-info.png)

1. Anda dapat memverifikasi jalur ke data di bucket Amazon S3 dengan menggunakan perintah. AWS CLI `aws s3 cp` Jika informasinya benar, perintah ini akan mengunduh salinan file Amazon S3. 

   ```
   aws s3 cp s3://amzn-s3-demo-bucket/sample_file_path ./ 
   ```

1. Siapkan izin di instans DB RDS for PostgreSQL untuk mengizinkan akses ke file di bucket Amazon S3. Untuk melakukannya, Anda menggunakan peran AWS Identity and Access Management (IAM) atau kredensil keamanan. Untuk informasi selengkapnya, lihat [Menyiapkan akses ke bucket Amazon S3](USER_PostgreSQL.S3Import.AccessPermission.md).

1. Berikan jalur dan detail objek Amazon S3 lainnya yang dikumpulkan (lihat langkah 2) ke fungsi `create_s3_uri` untuk membuat konsep objek URI Amazon S3. Untuk mempelajari selengkapnya tentang fungsi ini, lihat [aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri). Berikut ini adalah contoh pembuatan konsep objek ini selama sesi psql.

   ```
   postgres=> SELECT aws_commons.create_s3_uri(
      'docs-lab-store-for-rpg',
      'versions_and_jdks_listing.csv',
      'us-west-1'
   ) AS s3_uri \gset
   ```

   Pada langkah berikutnya, Anda meneruskan objek ini (`aws_commons._s3_uri_1`) ke fungsi `aws_s3.table_import_from_s3` untuk mengimpor data ke tabel. 

1. Invokasi fungsi `aws_s3.table_import_from_s3` untuk mengimpor data dari Amazon S3 ke dalam tabel Anda. Untuk informasi referensi, lihat [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3). Sebagai contoh, lihat [Mengimpor data dari Amazon S3 ke ](USER_PostgreSQL.S3Import.FileFormats.md). 

# Menyiapkan akses ke bucket Amazon S3
<a name="USER_PostgreSQL.S3Import.AccessPermission"></a>

Untuk mengimpor data dari file Amazon S3, beri izin instans DB RDS for PostgreSQL untuk mengakses bucket Amazon S3 yang berisi file tersebut. Berikan akses ke bucket Amazon S3 dengan satu dari dua cara, seperti yang dijelaskan dalam topik berikut.

**Topics**
+ [Menggunakan peran IAM untuk mengakses bucket Amazon S3](#USER_PostgreSQL.S3Import.ARNRole)
+ [Menggunakan kredensial rahasia untuk mengakses bucket Amazon S3](#USER_PostgreSQL.S3Import.Credentials)
+ [Memecahkan masalah akses ke Amazon S3](#USER_PostgreSQL.S3Import.troubleshooting)

## Menggunakan peran IAM untuk mengakses bucket Amazon S3
<a name="USER_PostgreSQL.S3Import.ARNRole"></a>

Sebelum Anda memuat data dari file Amazon S3, beri izin instans DB RDS for PostgreSQL untuk mengakses bucket Amazon S3 tempat file berada. Dengan cara ini, Anda tidak perlu mengelola informasi kredensial tambahan atau menyediakannya di panggilan fungsi [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3).

Untuk melakukannya, buat kebijakan IAM yang memberikan akses ke bucket Amazon S3. Buat peran IAM lampirkan kebijakan ke peran tersebut. Kemudian, tetapkan peran IAM ke instans DB Anda. 

**Untuk memberikan instans DB RDS for PostgreSQL izin akses ke Amazon S3 melalui IAM role**

1. Buat kebijakan IAM. 

   Kebijakan ini memberi bucket dan objek izin yang memungkinkan instans DB RDS for PostgreSQL Anda mengakses Amazon S3. 

   Sertakan tindakan yang diperlukan berikut dalam kebijakan untuk mengizinkan transfer file dari bucket Amazon S3 ke Amazon RDS: 
   + `s3:GetObject` 
   + `s3:ListBucket` 

   Sertakan sumber daya berikut dalam kebijakan untuk mengidentifikasi bucket dan objek Amazon S3 dalam bucket. Ini menunjukkan format Amazon Resource Name (ARN) untuk mengakses Amazon S3.
   + arn:aws:s3::: *amzn-s3-demo-bucket*
   + arn:aws:s3::: /\$1 *amzn-s3-demo-bucket*

   Untuk informasi selengkapnya tentang cara membuat kebijakan IAM untuk RDS for PostgreSQL, lihat [Membuat dan menggunakan kebijakan IAM untuk akses basis data IAM](UsingWithRDS.IAMDBAuth.IAMPolicy.md). Lihat juga [Tutorial: Membuat dan melampirkan kebijakan yang dikelola pelanggan pertama Anda](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html) di *Panduan Pengguna IAM*.

    AWS CLI Perintah berikut membuat kebijakan IAM bernama `rds-s3-import-policy` dengan opsi ini. Perintah ini akan memberikan akses ke bucket bernama *amzn-s3-demo-bucket*. 
**catatan**  
Catat Amazon Resource Name (ARN) dari kebijakan yang ditampilkan oleh perintah ini. Anda memerlukan ARN di langkah berikutnya saat Anda melampirkan kebijakan ke peran IAM.  
**Example**  

   Untuk Linux, macOS, atau Unix:

   ```
   aws iam create-policy \
      --policy-name rds-s3-import-policy \
      --policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "s3import",
            "Action": [
              "s3:GetObject",
              "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket", 
              "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ] 
          }
        ] 
      }'
   ```

   Untuk Windows:

   ```
   aws iam create-policy ^
      --policy-name rds-s3-import-policy ^
      --policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "s3import",
            "Action": [
              "s3:GetObject",
              "s3:ListBucket"
            ], 
            "Effect": "Allow",
            "Resource": [
              "arn:aws:s3:::amzn-s3-demo-bucket", 
              "arn:aws:s3:::amzn-s3-demo-bucket/*"
            ] 
          }
        ] 
      }'
   ```

1. Buat peran IAM. 

   Anda melakukan ini sehingga Amazon RDS dapat mengambil peran IAM ini untuk mengakses bucket Amazon S3 Anda. Untuk informasi selengkapnya, lihat [Membuat peran untuk mendelegasikan izin ke pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html) dalam *Panduan Pengguna IAM*.

   Sebaiknya gunakan kunci konteks kondisi global `[aws:SourceArn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)` dan `[aws:SourceAccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)` dalam kebijakan berbasis sumber daya untuk membatasi izin layanan ke sumber daya tertentu. Ini adalah cara paling efektif untuk melindungi dari [masalah deputi yang membingungkan](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html). 

   Jika Anda menggunakan kunci konteks kondisi global dan nilai `aws:SourceArn` berisi ID akun, nilai `aws:SourceAccount` dan akun dalam nilai `aws:SourceArn` harus menggunakan ID akun yang sama saat digunakan dalam pernyataan kebijakan yang sama.
   + Gunakan `aws:SourceArn` jika Anda menginginkan akses lintas layanan untuk satu sumber daya. 
   + Gunakan `aws:SourceAccount` jika Anda ingin mengizinkan sumber daya apa pun di akun tersebut dikaitkan dengan penggunaan lintas layanan.

   Dalam kebijakan, pastikan untuk menggunakan kunci konteks kondisi global `aws:SourceArn` dengan ARN penuh sumber daya. Contoh berikut menunjukkan bagaimana melakukannya dengan menggunakan AWS CLI perintah untuk membuat peran bernama`rds-s3-import-role`.   
**Example**  

   Untuk Linux, macOS, atau Unix:

   ```
   aws iam create-role \
      --role-name rds-s3-import-role \
      --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                   "aws:SourceAccount": "111122223333",
                   "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname"
                   }
                }
          }
        ] 
      }'
   ```

   Untuk Windows:

   ```
   aws iam create-role ^
      --role-name rds-s3-import-role ^
      --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
               "Service": "rds.amazonaws.com"
             },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                   "aws:SourceAccount": "111122223333",
                   "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname"
                   }
                }
          }
        ] 
      }'
   ```

1. Lampirkan kebijakan IAM yang Anda buat ke peran IAM yang Anda buat.

    AWS CLI Perintah berikut melampirkan kebijakan yang dibuat pada langkah sebelumnya ke peran bernama `rds-s3-import-role` Ganti `your-policy-arn` dengan ARN kebijakan yang Anda catat di langkah sebelumnya.   
**Example**  

   Untuk Linux, macOS, atau Unix:

   ```
   aws iam attach-role-policy \
      --policy-arn your-policy-arn \
      --role-name rds-s3-import-role
   ```

   Untuk Windows:

   ```
   aws iam attach-role-policy ^
      --policy-arn your-policy-arn ^
      --role-name rds-s3-import-role
   ```

1. Tambahkan peran IAM ke instans DB. 

   Anda melakukannya dengan menggunakan Konsol Manajemen AWS atau AWS CLI, seperti yang dijelaskan berikut. 

### Konsol
<a name="collapsible-section-1"></a>

**Untuk menambahkan peran IAM untuk instans DB PostgreSQL menggunakan konsol**

1. Masuk ke Konsol Manajemen AWS dan buka konsol Amazon RDS di [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Pilih nama instans DB PostgreSQL untuk menampilkan detailnya.

1. Di tab **Konektivitas & keamanan**, di bagian **Kelola peran IAM**, pilih peran yang akan ditambahkan pada bagian **Tambahkan peran IAM ke instans ** ini. 

1. Di bagian **Fitur**, pilih **s3Import**.

1. Pilih **Tambahkan peran**.

### AWS CLI
<a name="collapsible-section-2"></a>

**Untuk menambahkan peran IAM untuk instans DB PostgreSQL menggunakan CLI**
+ Gunakan perintah berikut untuk menambahkan peran ke instans DB PostgreSQL bernama `my-db-instance`. Ganti *`your-role-arn`* dengan ARN peran yang Anda catat pada langkah sebelumnya. Gunakan `s3Import` untuk nilai opsi `--feature-name`.   
**Example**  

  Untuk Linux, macOS, atau Unix:

  ```
  aws rds add-role-to-db-instance \
     --db-instance-identifier my-db-instance \
     --feature-name s3Import \
     --role-arn your-role-arn   \
     --region your-region
  ```

  Untuk Windows:

  ```
  aws rds add-role-to-db-instance ^
     --db-instance-identifier my-db-instance ^
     --feature-name s3Import ^
     --role-arn your-role-arn ^
     --region your-region
  ```

### API RDS
<a name="collapsible-section-3"></a>

Untuk menambahkan peran IAM untuk instance PostgreSQL DB menggunakan Amazon RDS API, panggil operasi. 

## Menggunakan kredensial rahasia untuk mengakses bucket Amazon S3
<a name="USER_PostgreSQL.S3Import.Credentials"></a>

Jika ingin, Anda dapat menggunakan kredensial rahasia untuk memberikan akses ke bucket Amazon S3, alih-alih memberikan akses ke peran IAM. Anda melakukannya dengan menentukan parameter `credentials` dalam panggilan fungsi [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3). 

`credentials`Parameternya adalah struktur tipe`aws_commons._aws_credentials_1`, yang berisi AWS kredensyal. Gunakan fungsi [aws\$1commons.create\$1aws\$1credentials](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_aws_credentials) untuk mengatur kunci akses dan kunci rahasia dalam struktur `aws_commons._aws_credentials_1`, seperti yang ditunjukkan berikut ini. 

```
postgres=> SELECT aws_commons.create_aws_credentials(
   'sample_access_key', 'sample_secret_key', '')
AS creds \gset
```

Setelah membuat struktur `aws_commons._aws_credentials_1 `, gunakan fungsi [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) yang dengan parameter `credentials` untuk mengimpor data, seperti yang ditunjukkan berikut.

```
postgres=> SELECT aws_s3.table_import_from_s3(
   't', '', '(format csv)',
   :'s3_uri', 
   :'creds'
);
```

Atau Anda dapat menyertakan panggilan fungsi [aws\$1commons.create\$1aws\$1credentials](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_aws_credentials) sebaris dalam panggilan fungsi `aws_s3.table_import_from_s3`.

```
postgres=> SELECT aws_s3.table_import_from_s3(
   't', '', '(format csv)',
   :'s3_uri', 
   aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
```

## Memecahkan masalah akses ke Amazon S3
<a name="USER_PostgreSQL.S3Import.troubleshooting"></a>

Jika Anda mengalami masalah koneksi saat mencoba mengimpor data dari Amazon S3, lihat rekomendasi berikut:
+ [Memecahkan masalah identitas dan akses Amazon RDS](security_iam_troubleshoot.md)
+ [Memecahkan Masalah Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/troubleshooting.html) di *Panduan Pengguna Amazon Simple Storage Service*
+ [Memecahkan Masalah Amazon S3 dan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_iam-s3.html) di *Panduan Pengguna IAM*

# Mengimpor data dari Amazon S3 ke
<a name="USER_PostgreSQL.S3Import.FileFormats"></a>

Anda mengimpor data dari bucket Amazon S3 dengan menggunakan fungsi `table_import_from_s3` aws\$1s3. Untuk informasi referensi, lihat [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3). 

**catatan**  
Contoh berikut menggunakan metode peran IAM untuk mengizinkan akses ke bucket Amazon S3. Dengan demikian, panggilan fungsi `aws_s3.table_import_from_s3` tidak termasuk parameter kredensial.

Berikut ini menunjukkan contoh khas.

```
postgres=> SELECT aws_s3.table_import_from_s3(
   't1',
   '', 
   '(format csv)',
   :'s3_uri'
);
```

Parameternya sebagai berikut:
+ `t1` – Nama untuk tabel dalam instans DB PostgreSQL tempat tujuan penyalinan data. 
+ `''` – Daftar opsional kolom dalam tabel basis data. Anda dapat menggunakan parameter ini untuk menunjukkan kolom data S3 mana yang masuk ke kolom tabel mana. Jika tidak ada kolom yang ditentukan, semua kolom akan disalin ke tabel. Untuk contoh cara menggunakan daftar kolom, lihat [Mengimpor file Amazon S3 yang menggunakan pemisah kustom](#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter).
+ `(format csv)` – Argumen PostgreSQL COPY. Proses penyalinan menggunakan argumen dan format perintah [PostgreSQL COPY](https://www.postgresql.org/docs/current/sql-copy.html) untuk mengimpor data. Pilihan untuk format mencakup nilai yang dipisahkan koma (CSV) seperti yang ditunjukkan dalam contoh ini, teks, dan biner. Defaultnya adalah teks. 
+  `s3_uri` – Struktur yang berisi informasi yang mengidentifikasi file Amazon S3. Untuk contoh penggunaan fungsi [aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri) untuk membuat struktur `s3_uri`, lihat [Ikhtisar impor data dari data Amazon S3](USER_PostgreSQL.S3Import.Overview.md).

Untuk informasi selengkapnya tentang fungsi ini, lihat [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3).

Fungsi `aws_s3.table_import_from_s3` menampilkan teks. Untuk menentukan jenis file lain yang akan diimpor dari bucket Amazon S3, lihat salah satu contoh berikut. 

**catatan**  
Mengimpor file 0 byte akan menyebabkan kesalahan.

**Topics**
+ [Mengimpor file Amazon S3 yang menggunakan pemisah kustom](#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter)
+ [Mengimpor file terkompresi (gzip) Amazon S3](#USER_PostgreSQL.S3Import.FileFormats.gzip)
+ [Mengimpor file Amazon S3 yang dienkode](#USER_PostgreSQL.S3Import.FileFormats.Encoded)

## Mengimpor file Amazon S3 yang menggunakan pemisah kustom
<a name="USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter"></a>

Contoh berikut menunjukkan cara mengimpor file yang menggunakan pemisah kustom. Ini juga menunjukkan cara mengontrol lokasi penempatan data dalam tabel basis data menggunakan parameter `column_list` fungsi [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3). 

Untuk contoh ini, asumsikan bahwa informasi berikut ini diatur ke dalam kolom yang dipisahkan tanda pipa di file Amazon S3.

```
1|foo1|bar1|elephant1
2|foo2|bar2|elephant2
3|foo3|bar3|elephant3
4|foo4|bar4|elephant4
...
```

**Untuk mengimpor file yang menggunakan pemisah kustom**

1. Buat tabel dalam basis data untuk data yang diimpor.

   ```
   postgres=> CREATE TABLE test (a text, b text, c text, d text, e text);
   ```

1. Gunakan bentuk berikut fungsi [aws\$1s3.table\$1import\$1from\$1s3](USER_PostgreSQL.S3Import.Reference.md#aws_s3.table_import_from_s3) berikut untuk mengimpor data dari file Amazon S3. 

   Anda dapat memasukkan panggilan fungsi [aws\$1commons.create\$1s3\$1uri](USER_PostgreSQL.S3Import.Reference.md#USER_PostgreSQL.S3Import.create_s3_uri) sebaris dalam panggilan fungsi `aws_s3.table_import_from_s3` untuk menentukan file. 

   ```
   postgres=> SELECT aws_s3.table_import_from_s3(
      'test',
      'a,b,d,e',
      'DELIMITER ''|''', 
      aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'pipeDelimitedSampleFile', 'us-east-2')
   );
   ```

Data tersebut ini berada dalam tabel di kolom berikut.

```
postgres=> SELECT * FROM test;
a | b | c | d | e 
---+------+---+---+------+-----------
1 | foo1 | | bar1 | elephant1
2 | foo2 | | bar2 | elephant2
3 | foo3 | | bar3 | elephant3
4 | foo4 | | bar4 | elephant4
```

## Mengimpor file terkompresi (gzip) Amazon S3
<a name="USER_PostgreSQL.S3Import.FileFormats.gzip"></a>

Contoh berikut menunjukkan cara mengimpor file dari Amazon S3 yang dikompresi menggunakan gzip. File yang Anda impor harus memiliki metadata Amazon S3 berikut:
+ Kunci: `Content-Encoding`
+ Nilai: `gzip`

Jika Anda mengunggah file menggunakan Konsol Manajemen AWS, metadata biasanya diterapkan oleh sistem. Untuk informasi tentang mengunggah file ke Amazon S3 menggunakan Konsol Manajemen AWS, API, AWS CLI atau API, [lihat Mengunggah](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html) objek di Panduan Pengguna Layanan *Penyimpanan Sederhana Amazon*. 

Untuk informasi selengkapnya tentang metadata Amazon S3 dan detail tentang metadata yang disediakan sistem, lihat [Mengedit metadata objek di konsol Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-object-metadata.html) di *Panduan Pengguna Amazon Simple Storage Service*.

Impor file gzip ke dalam instans DB RDS for PostgreSQL seperti yang ditunjukkan berikut ini.

```
postgres=> CREATE TABLE test_gzip(id int, a text, b text, c text, d text);
postgres=> SELECT aws_s3.table_import_from_s3(
 'test_gzip', '', '(format csv)',
 'amzn-s3-demo-bucket', 'test-data.gz', 'us-east-2'
);
```

## Mengimpor file Amazon S3 yang dienkode
<a name="USER_PostgreSQL.S3Import.FileFormats.Encoded"></a>

Contoh berikut menunjukkan cara mengimpor file dari Amazon S3 yang memiliki pengodean Windows-1252.

```
postgres=> SELECT aws_s3.table_import_from_s3(
 'test_table', '', 'encoding ''WIN1252''',
 aws_commons.create_s3_uri('amzn-s3-demo-bucket', 'SampleFile', 'us-east-2')
);
```

# Referensi fungsi
<a name="USER_PostgreSQL.S3Import.Reference"></a>

**Topics**
+ [aws\$1s3.table\$1import\$1from\$1s3](#aws_s3.table_import_from_s3)
+ [aws\$1commons.create\$1s3\$1uri](#USER_PostgreSQL.S3Import.create_s3_uri)
+ [aws\$1commons.create\$1aws\$1credentials](#USER_PostgreSQL.S3Import.create_aws_credentials)

## aws\$1s3.table\$1import\$1from\$1s3
<a name="aws_s3.table_import_from_s3"></a>

Mengimpor data Amazon S3 ke tabel Amazon RDS. Ekstensi `aws_s3` memberikan fungsi `aws_s3.table_import_from_s3`. Nilai yang ditampilkan berupa teks.

### Sintaksis
<a name="aws_s3.table_import_from_s3-syntax"></a>

Parameter yang diperlukan adalah `table_name`, `column_list`, dan `options`. Parameter ini mengidentifikasi tabel basis data dan menentukan cara data disalin ke dalam tabel. 

Anda juga dapat menggunakan parameter berikut: 
+ Parameter `s3_info` menentukan file Amazon S3 yang akan diimpor. Saat Anda menggunakan parameter ini, akses ke Amazon S3 disediakan oleh peran IAM untuk instans DB PostgreSQL.

  ```
  aws_s3.table_import_from_s3 (
     table_name text, 
     column_list text, 
     options text, 
     s3_info aws_commons._s3_uri_1
  )
  ```
+ Parameter `credentials` menentukan kredensial untuk mengakses Amazon S3. Saat Anda menggunakan parameter ini, jangan menggunakan peran IAM.

  ```
  aws_s3.table_import_from_s3 (
     table_name text, 
     column_list text, 
     options text, 
     s3_info aws_commons._s3_uri_1,
     credentials aws_commons._aws_credentials_1
  )
  ```

### Parameter
<a name="aws_s3.table_import_from_s3-parameters"></a>

 *table\$1name*   
String teks yang diperlukan yang berisi nama tabel basis data PostgreSQL sebagai tujuan impor data. 

 *column\$1list*   
String teks yang diperlukan yang berisi daftar opsional kolom tabel basis data PostgreSQL tempat tujuan data akan disalin. Jika string kosong, semua kolom tabel akan digunakan. Sebagai contoh, lihat [Mengimpor file Amazon S3 yang menggunakan pemisah kustom](USER_PostgreSQL.S3Import.FileFormats.md#USER_PostgreSQL.S3Import.FileFormats.CustomDelimiter).

 *options*   
String teks yang diperlukan yang berisi argumen untuk perintah `COPY` PostgreSQL. Argumen ini menentukan cara data akan disalin ke dalam tabel PostgreSQL. Untuk detail selengkapnya, lihat [Dokumentasi PostgreSQL COPY](https://www.postgresql.org/docs/current/sql-copy.html).

 *s3\$1info*   
Jenis komposit `aws_commons._s3_uri_1` yang berisi informasi tentang objek S3 berikut:  
+ `bucket` – Nama bucket Amazon S3 yang berisi file.
+ `file_path` – Nama file Amazon S3 yang mencakup jalur file.
+ `region`— AWS Wilayah tempat file tersebut berada. Untuk daftar nama AWS Wilayah dan nilai terkait, lihat[Wilayah, Zona Ketersediaan, dan Zona Lokal](Concepts.RegionsAndAvailabilityZones.md).

 *credentials*   
Jenis komposit `aws_commons._aws_credentials_1` yang berisi kredensial berikut yang akan digunakan untuk operasi impor:  
+ Kunci akses
+ Kunci rahasia
+ Token sesi
Untuk informasi tentang cara membuat struktur komposit `aws_commons._aws_credentials_1`, lihat [aws\$1commons.create\$1aws\$1credentials](#USER_PostgreSQL.S3Import.create_aws_credentials).

### Sintaksis alternatif
<a name="aws_s3.table_import_from_s3-alternative-syntax"></a>

Untuk memudahkan pengujian, Anda dapat menggunakan serangkaian parameter yang diperluas, bukan parameter `s3_info` dan `credentials`. Berikut ini adalah variasi sintaks tambahan untuk fungsi `aws_s3.table_import_from_s3`: 
+ Alih-alih menggunakan parameter `s3_info` untuk mengidentifikasi file Amazon S3, gunakan kombinasi parameter `bucket`, `file_path`, dan `region`. Dengan bentuk fungsi ini, akses ke Amazon S3 disediakan oleh peran IAM pada instans DB PostgreSQL.

  ```
  aws_s3.table_import_from_s3 (
     table_name text, 
     column_list text, 
     options text, 
     bucket text, 
     file_path text, 
     region text 
  )
  ```
+ Alih-alih menggunakan parameter `credentials` untuk menentukan akses Amazon S3, gunakan kombinasi parameter `access_key`, `session_key`, dan `session_token`.

  ```
  aws_s3.table_import_from_s3 (
     table_name text, 
     column_list text, 
     options text, 
     bucket text, 
     file_path text, 
     region text, 
     access_key text, 
     secret_key text, 
     session_token text 
  )
  ```

### Parameter alternatif
<a name="aws_s3.table_import_from_s3-alternative-parameters"></a>

*bucket*  
String teks yang berisi nama bucket Amazon S3 yang berisi file. 

*file\$1path*  
String teks yang berisi nama file Amazon S3 beserta jalur file. 

*region*  
String teks yang mengidentifikasi Wilayah AWS lokasi file. Untuk daftar Wilayah AWS nama dan nilai terkait, lihat[Wilayah, Zona Ketersediaan, dan Zona Lokal](Concepts.RegionsAndAvailabilityZones.md).

*access\$1key*  
String teks yang berisi kunci akses untuk digunakan dalam operasi impor. Default-nya adalah NULL.

*secret\$1key*  
String teks yang berisi kunci rahasia yang akan digunakan dalam operasi impor. Default-nya adalah NULL.

*session\$1token*  
(Opsional) String teks yang berisi kunci sesi yang akan digunakan dalam operasi impor. Default-nya adalah NULL.

## aws\$1commons.create\$1s3\$1uri
<a name="USER_PostgreSQL.S3Import.create_s3_uri"></a>

Membuat struktur `aws_commons._s3_uri_1` untuk menyimpan informasi file Amazon S3. Gunakan hasil dari fungsi `aws_commons.create_s3_uri` di parameter `s3_info` dari fungsi [aws\$1s3.table\$1import\$1from\$1s3](#aws_s3.table_import_from_s3). 

### Sintaksis
<a name="USER_PostgreSQL.S3Import.create_s3_uri-syntax"></a>

```
aws_commons.create_s3_uri(
   bucket text,
   file_path text,
   region text
)
```

### Parameter
<a name="USER_PostgreSQL.S3Import.create_s3_uri-parameters"></a>

*bucket*  
String teks yang diperlukan yang berisi nama bucket Amazon S3 untuk file tersebut.

*file\$1path*  
String teks yang diperlukan yang berisi nama file Amazon S3 beserta jalurnya.

*region*  
String teks yang diperlukan Wilayah AWS yang berisi file tersebut. Untuk daftar Wilayah AWS nama dan nilai terkait, lihat[Wilayah, Zona Ketersediaan, dan Zona Lokal](Concepts.RegionsAndAvailabilityZones.md).

## aws\$1commons.create\$1aws\$1credentials
<a name="USER_PostgreSQL.S3Import.create_aws_credentials"></a>

Mengatur kunci akses dan kunci rahasia dalam struktur `aws_commons._aws_credentials_1`. Gunakan hasil dari fungsi `aws_commons.create_aws_credentials` di parameter `credentials` dari fungsi [aws\$1s3.table\$1import\$1from\$1s3](#aws_s3.table_import_from_s3). 

### Sintaksis
<a name="USER_PostgreSQL.S3Import.create_aws_credentials-syntax"></a>

```
aws_commons.create_aws_credentials(
   access_key text,
   secret_key text,
   session_token text
)
```

### Parameter
<a name="USER_PostgreSQL.S3Import.create_aws_credentials-parameters"></a>

*access\$1key*  
String teks yang diperlukan berisi kunci akses yang digunakan untuk mengimpor file Amazon S3. Default-nya adalah NULL.

*secret\$1key*  
String teks yang diperlukan yang berisi kunci rahasia yang akan digunakan untuk mengimpor file Amazon S3. Default-nya adalah NULL.

*session\$1token*  
String teks opsional yang berisi token sesi yang akan digunakan untuk mengimpor file Amazon S3. Default-nya adalah NULL. Jika Anda memberikan `session_token` opsional, Anda dapat menggunakan kredensial sementara.

# Mengangkut basis data PostgreSQL antara instans DB
<a name="PostgreSQL.TransportableDB"></a>

Dengan menggunakan basis data PostgreSQL yang dapat ditranspor untuk Amazon RDS, Anda dapat memindahkan basis data PostgreSQL antara dua instans DB. Ini adalah cara yang sangat cepat untuk memigrasikan basis data besar antara instans DB yang berbeda. Untuk menggunakan pendekatan ini, instans DB Anda harus menjalankan PostgreSQL versi utama. 

Kemampuan ini mengharuskan Anda menginstal ekstensi `pg_transport` di instans DB sumber dan tujuan. Ekstensi `pg_transport` menyediakan mekanisme transportasi fisik yang memindahkan file basis data dengan pemrosesan minimal. Mekanisme ini memindahkan data jauh lebih cepat daripada proses dump dan load tradisional, dengan waktu henti yang lebih sedikit. 

**catatan**  
Basis data PostgreSQL yang dapat ditranspor tersedia dalam RDS for PostgreSQL 11.5 dan yang lebih tinggi, dan RDS for PostgreSQL versi 10.10 dan yang lebih tinggi.

Untuk mentranspor instans DB PostgreSQL dari satu instans DB RDS for PostgreSQL ke instans DB lainnya, pertama-tama siapkan instans sumber dan tujuan sebagaimana dijelaskan dalam [ Menyiapkan instans DB untuk transportasi](PostgreSQL.TransportableDB.Setup.md). Anda kemudian dapat mentranspor basis data menggunakan fungsi yang dijelaskan dalam [ Mentranspor basis data PostgreSQL](PostgreSQL.TransportableDB.Transporting.md). 

**Topics**
+ [Apa yang terjadi selama transportasi basis data](#PostgreSQL.TransportableDB.DuringTransport)
+ [Batasan dalam penggunaan basis data PostgreSQL yang dapat ditranspor](#PostgreSQL.TransportableDB.Limits)
+ [Bersiap untuk mentranspor basis data PostgreSQL](PostgreSQL.TransportableDB.Setup.md)
+ [Mentranspor basis data PostgreSQL ke tujuan dari sumber](PostgreSQL.TransportableDB.Transporting.md)
+ [Referensi fungsi basis data yang dapat ditranspor](PostgreSQL.TransportableDB.transport.import_from_server.md)
+ [Referensi parameter basis data yang dapat ditranspor](PostgreSQL.TransportableDB.Parameters.md)

## Apa yang terjadi selama transportasi basis data
<a name="PostgreSQL.TransportableDB.DuringTransport"></a>

Fitur basis data PostgreSQL yang dapat ditranspor menggunakan model tarik untuk mengimpor basis data dari instans DB sumber ke tujuan. Fungsi `transport.import_from_server` membuat basis data bergerak pada instans DB tujuan. Basis data bergerak tidak dapat diakses pada instans DB tujuan selama durasi transportasi.

Ketika transportasi dimulai, semua sesi saat ini pada basis data sumber berakhir. Setiap basis data selain basis data sumber pada instans DB sumber tidak terpengaruh oleh transportasi. 

Basis data sumber dibuat menjadi mode hanya-baca khusus. Saat berada dalam mode ini, Anda dapat terhubung ke basis data sumber dan menjalankan kueri hanya baca. Namun, kueri berkemampuan tulis dan beberapa jenis perintah lainnya diblokir. Hanya basis data sumber spesifik yang ditranspor yang terpengaruh oleh pembatasan ini. 

Selama transportasi, Anda tidak dapat memulihkan instans DB tujuan ke suatu titik waktu. Ini karena transportasi tersebut tidak bersifat transaksional dan tidak menggunakan log write-ahead PostgreSQL untuk mencatat perubahan. Jika instans DB tujuan mengaktifkan pencadangan otomatis, cadangan akan diambil secara otomatis setelah transportasi selesai. Point-in-timepemulihan tersedia beberapa kali *setelah* pencadangan selesai.

Jika transportasi gagal, ekstensi `pg_transport` berupaya untuk membatalkan semua perubahan ke instans DB sumber dan tujuan. Ini termasuk menghapus basis data yang ditranspor sebagian di tujuan. Bergantung pada jenis kegagalan, basis data sumber dapat terus menolak kueri berkemampuan tulis. Jika ini terjadi, gunakan perintah berikut untuk memungkinkan kueri berkemampuan tulis.

```
ALTER DATABASE db-name SET default_transaction_read_only = false;
```

## Batasan dalam penggunaan basis data PostgreSQL yang dapat ditranspor
<a name="PostgreSQL.TransportableDB.Limits"></a>

Basis data yang dapat ditranspor memiliki batasan berikut:
+ **Replika baca** – Anda tidak dapat menggunakan basis data yang dapat ditranspor pada replika baca atau instans induk replika baca.
+ **Jenis kolom yang tidak didukung** – Anda tidak dapat menggunakan jenis data `reg` dalam tabel basis data apa pun yang akan Anda transportasikan dengan metode ini. Jenis ini tergantung pada sistem katalog objek IDs (OIDs), yang sering berubah selama transportasi.
+ **Tablespace** – Semua objek basis data sumber harus dalam tablespace `pg_default` default. 
+ **Kompatibilitas** – Instans DB sumber dan tujuan harus menjalankan PostgreSQL dalam versi utama yang sama. 
+ **Ekstensi** — Instans DB sumber hanya dapat memiliki penginstalan `pg_transport`. 
+ **Peran dan ACLs** — Hak akses database sumber dan informasi kepemilikan tidak dibawa ke database tujuan. Semua objek basis data dibuat dan dimiliki oleh pengguna tujuan transportasi lokal.
+ **Transportasi bersamaan** — Instans DB tunggal dapat mendukung hingga 32 transportasi bersamaan, termasuk impor dan ekspor, jika proses pekerja telah dikonfigurasi dengan benar. 
+ **Khusus instans DB RDS for PostgreSQL** - Basis data PostgreSQL yang dapat ditranspor didukung hanya pada instans DB RDS for PostgreSQL. Anda tidak dapat menggunakannya dengan basis data on-premise atau basis data yang berjalan di Amazon EC2.

# Bersiap untuk mentranspor basis data PostgreSQL
<a name="PostgreSQL.TransportableDB.Setup"></a>

Sebelum memulai, pastikan bahwa instans DB RDS for PostgreSQL Anda memenuhi persyaratan berikut:
+ Instans DB RDS for PostgreSQL untuk sumber dan tujuan harus menjalankan versi PostgreSQL yang sama.
+ DB tujuan tidak dapat memiliki basis data dengan nama yang sama dengan DB sumber yang ingin Anda transportasikan.
+ Akun yang Anda gunakan untuk menjalankan transportasi membutuhkan hak istimewa `rds_superuser` pada DB sumber dan DB tujuan. 
+ Grup keamanan untuk instans DB sumber harus mengizinkan akses masuk dari instans DB tujuan. Izin ini mungkin sudah ada jika instans DB sumber dan tujuan Anda berada di VPC. Untuk mengetahui informasi selengkapnya tentang grup keamanan, lihat [Mengontrol akses dengan grup keamanan](Overview.RDSSecurityGroups.md).

Mentranspor basis data dari instans DB sumber ke instans DB tujuan memerlukan beberapa perubahan pada grup parameter DB yang terkait dengan setiap instans. Artinya Anda harus membuat grup parameter DB kustom untuk instans DB sumber dan membuat grup parameter DB kustom untuk instans DB tujuan.

**catatan**  
Jika instans DB Anda sudah dikonfigurasi menggunakan grup parameter DB kustom, Anda dapat memulai dengan langkah 2 dalam prosedur berikut. 

**Cara mengonfigurasi parameter grup DB kustom untuk mentranspor basis data**

Untuk langkah-langkah berikut, gunakan akun yang memiliki hak istimewa `rds_superuser`. 

1. Jika instans DB sumber dan tujuan menggunakan grup parameter DB default, Anda perlu membuat grup parameter DB khusus menggunakan versi yang sesuai untuk instance Anda. Ini dilakukan agar Anda dapat mengubah nilai untuk beberapa parameter. Untuk informasi selengkapnya, lihat [Grup parameter untuk RDS](USER_WorkingWithParamGroups.md). 

1. Dalam grup parameter DB kustom, ubah nilai untuk parameter berikut:
   + `shared_preload_libraries`— Tambahkan `pg_transport` ke daftar pustaka. 
   + `pg_transport.num_workers` – Nilai default-nya adalah 3. Tingkatkan atau kurangi nilai ini sesuai kebutuhan untuk basis data Anda. Untuk basis data 200 GB, kami sarankan tidak lebih dari 8. Perlu diingat bahwa jika Anda meningkatkan nilai default untuk parameter ini, Anda juga harus meningkatkan nilai `max_worker_processes`. 
   + `pg_transport.work_mem` – Nilai default-nya adalah 128 MB atau 256 MB, tergantung versi PostgreSQL. Pengaturan default biasanya dapat dibiarkan saja. 
   + `max_worker_processes` – Nilai parameter ini perlu diatur menggunakan perhitungan berikut:

     ```
     (3 * pg_transport.num_workers) + 9
     ```

     Nilai ini diperlukan di tujuan untuk menangani berbagai proses pekerja latar belakang yang terlibat dalam transportasi. Untuk mempelajari lebih lanjut tentang `max_worker_processes,`, lihat [Resource Consumption](https://www.postgresql.org/docs/current/runtime-config-resource.html) dalam dokumentasi PostgreSQL. 

   Untuk informasi selengkapnya tentang parameter `pg_transport`, lihat [Referensi parameter basis data yang dapat ditranspor](PostgreSQL.TransportableDB.Parameters.md).

1. Boot ulang instans DB RDS for PostgreSQL sumber dan instans tujuan agar pengaturan untuk parameter tersebut berlaku.

1. Terhubung ke instans DB RDS for PostgreSQL sumber Anda.

   ```
   psql --host=source-instance.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. Hapus ekstensi asing dari skema publik instans DB. Hanya ekstensi `pg_transport` yang diizinkan selama operasi transportasi aktual.

1. Instal ekstensi `pg_transport` sebagai berikut:

   ```
   postgres=> CREATE EXTENSION pg_transport;
   CREATE EXTENSION
   ```

1. Terhubung ke instans DB RDS for PostgreSQL tujuan Anda. Hapus ekstensi asing apa pun, lalu instal ekstensi `pg_transport`.

   ```
   postgres=> CREATE EXTENSION pg_transport;
   CREATE EXTENSION
   ```

# Mentranspor basis data PostgreSQL ke tujuan dari sumber
<a name="PostgreSQL.TransportableDB.Transporting"></a>

Setelah Anda menyelesaikan proses yang dijelaskan dalam [Bersiap untuk mentranspor basis data PostgreSQL](PostgreSQL.TransportableDB.Setup.md), Anda dapat memulai transportasi. Untuk melakukannya, jalankan fungsi `transport.import_from_server` pada instans DB tujuan. Dalam sintaks berikut ini Anda dapat menemukan parameter fungsi.

```
SELECT transport.import_from_server( 
   'source-db-instance-endpoint', 
    source-db-instance-port, 
   'source-db-instance-user', 
   'source-user-password', 
   'source-database-name', 
   'destination-user-password', 
   false);
```

Nilai `false` yang ditunjukkan dalam contoh memberi tahu fungsi bahwa ini bukan dry run. Untuk menguji penyiapan transportasi, Anda dapat menentukan `true` untuk opsi `dry_run` saat memanggil fungsi, seperti yang ditunjukkan berikut ini:

```
postgres=> SELECT transport.import_from_server(
    'docs-lab-source-db.666666666666aws-region.rds.amazonaws.com', 5432,
    'postgres', '********', 'labdb', '******', true);
INFO:  Starting dry-run of import of database "labdb".
INFO:  Created connections to remote database        (took 0.03 seconds).
INFO:  Checked remote cluster compatibility          (took 0.05 seconds).
INFO:  Dry-run complete                         (took 0.08 seconds total).
 import_from_server
--------------------

(1 row)
```

Baris INFO adalah output karena parameter `pg_transport.timing` diatur ke nilai default-nya, `true`. Atur `dry_run` ke `false` ketika Anda menjalankan perintah dan basis data sumber diimpor ke tujuan, seperti yang ditunjukkan berikut:

```
INFO:  Starting import of database "labdb".
INFO:  Created connections to remote database        (took 0.02 seconds).
INFO:  Marked remote database as read only           (took 0.13 seconds).
INFO:  Checked remote cluster compatibility          (took 0.03 seconds).
INFO:  Signaled creation of PITR blackout window     (took 2.01 seconds).
INFO:  Applied remote database schema pre-data       (took 0.50 seconds).
INFO:  Created connections to local cluster          (took 0.01 seconds).
INFO:  Locked down destination database              (took 0.00 seconds).
INFO:  Completed transfer of database files          (took 0.24 seconds).
INFO:  Completed clean up                            (took 1.02 seconds).
INFO:  Physical transport complete              (took 3.97 seconds total).
import_from_server
--------------------
(1 row)
```

Fungsi ini mengharuskan Anda memberikan kata sandi pengguna basis data. Oleh karena itu, kami menyarankan Anda untuk mengubah kata sandi dari peran pengguna yang Anda gunakan setelah transportasi selesai. Atau, Anda dapat menggunakan variabel terikat SQL untuk membuat peran pengguna sementara. Gunakan peran sementara ini untuk transportasi, lalu buang peran tersebut setelahnya. 

Jika transportasi Anda tidak berhasil, Anda mungkin melihat pesan kesalahan yang mirip dengan yang berikut ini:

```
pg_transport.num_workers=8 25% of files transported failed to download file data
```

Pesan kesalahan "gagal mengunduh data file" menunjukkan bahwa jumlah proses pekerja tidak diatur dengan benar untuk ukuran basis data. Anda mungkin perlu meningkatkan atau mengurangi nilai yang diatur untuk `pg_transport.num_workers`. Setiap kegagalan melaporkan persentase penyelesaian, sehingga Anda dapat melihat dampak perubahan Anda. Misalnya, mengubah pengaturan dari 8 menjadi 4 dalam satu kasus menghasilkan hal berikut:

```
pg_transport.num_workers=4 75% of files transported failed to download file data
```

Perlu diingat bahwa parameter `max_worker_processes` juga diperhitungkan selama proses transportasi. Dengan kata lain, Anda mungkin perlu memodifikasi `pg_transport.num_workers` dan `max_worker_processes` agar transportasi basis data berhasil dijalankan. Contoh yang ditampilkan akhirnya berfungsi ketika `pg_transport.num_workers` diatur ke 2:

```
pg_transport.num_workers=2 100% of files transported
```

Lihat informasi selengkapnya tentang fungsi `transport.import_from_server` dan parameternya di [Referensi fungsi basis data yang dapat ditranspor](PostgreSQL.TransportableDB.transport.import_from_server.md). 

# Referensi fungsi basis data yang dapat ditranspor
<a name="PostgreSQL.TransportableDB.transport.import_from_server"></a>

`transport.import_from_server`Fungsi ini mengangkut SQL database Postgre dengan mengimpornya dari instance DB sumber ke instance DB tujuan. Hal ini dilakukan menggunakan mekanisme transportasi koneksi basis data fisik.

Sebelum memulai transportasi, fungsi ini memverifikasi bahwa instans DB sumber dan tujuan merupakan versi yang sama dan kompatibel untuk migrasi. Hal ini juga menegaskan bahwa instans DB tujuan memiliki cukup ruang untuk sumbernya. 

**Sintaks**

```
transport.import_from_server(
   host text,
   port int,
   username text,
   password text,
   database text,
   local_password text,
   dry_run bool
)
```

**Nilai yang Ditampilkan**

Tidak ada.

**Parameter**

Anda dapat menemukan deskripsi parameter fungsi `transport.import_from_server` dalam tabel berikut.


****  

| Parameter | Deskripsi | 
| --- | --- | 
| host |  Titik akhir instans DB sumber.  | 
| port | Integer yang mewakili port instans DB sumber. Instans Postgre SQL DB sering menggunakan port 5432. | 
| username |  Pengguna instans DB sumber. Pengguna ini harus menjadi anggota peran `rds_superuser`.  | 
| password |  Kata sandi pengguna instans DB sumber.  | 
| database |  Nama basis data dalam instans DB sumber untuk ditranspor.  | 
| local\$1password |  Kata sandi lokal pengguna saat ini untuk instans DB tujuan. Pengguna ini harus menjadi anggota peran `rds_superuser`.  | 
| dry\$1run | Nilai Boolean opsional yang menetapkan apakah dry run akan dijalankan. Default-nya adalah `false`, yang artinya transportasi berlanjut.Untuk mengonfirmasi kompatibilitas antara instans DB sumber dan tujuan tanpa benar-benar melakukan transportasi, atur dry\$1run ke true. | 

**Contoh**

Sebagai contoh, lihat [Mentranspor basis data PostgreSQL ke tujuan dari sumber](PostgreSQL.TransportableDB.Transporting.md).

# Referensi parameter basis data yang dapat ditranspor
<a name="PostgreSQL.TransportableDB.Parameters"></a>

Beberapa parameter mengontrol perilaku ekstensi `pg_transport`. Selanjutnya, Anda dapat menemukan deskripsi parameter ini. 

**`pg_transport.num_workers`**  
Jumlah pekerja yang akan digunakan dalam proses transportasi. Default-nya adalah 3. Nilai yang valid adalah 1–32. Bahkan transportasi basis data terbesar biasanya membutuhkan kurang dari 8 pekerja. Nilai pengaturan ini pada instans DB tujuan digunakan oleh tujuan dan sumber selama transportasi.

**`pg_transport.timing` **  
Menentukan apakah akan melaporkan informasi waktu selama transportasi. Default-nya adalah `true`, artinya informasi waktu dilaporkan. Kami menyarankan agar Anda membiarkan parameter ini diatur ke `true` agar Anda dapat memantau progresnya. Untuk contoh hasilnya, lihat [Mentranspor basis data PostgreSQL ke tujuan dari sumber](PostgreSQL.TransportableDB.Transporting.md).

**`pg_transport.work_mem`**  
Jumlah maksimum memori untuk dialokasikan kepada setiap pekerja. Default-nya adalah 131072 kilobyte (KB) atau 262144 KB (256 MB), tergantung versi PostgreSQL. Nilai minimumnya adalah 64 megabyte (65536 KB). Nilai yang valid dalam kilobyte (KBs) sebagai unit basis-2 biner, di mana 1 KB = 1024 byte.   
Transportasi mungkin menggunakan lebih sedikit memori dari yang ditentukan dalam parameter ini. Bahkan transportasi basis data besar biasanya membutuhkan kurang dari 256 MB (262144 KB) memori per pekerja.