

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

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