

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

# Replikasi logis
<a name="logical-replication-considerations"></a>

Replikasi logis adalah metode mereplikasi objek data dan perubahannya berdasarkan identitas replikasi objek dan perubahannya. Replikasi logis menggunakan model *publikasi* dan *berlangganan* di mana satu atau lebih pelanggan berlangganan satu atau lebih publikasi pada node penerbit. Pelanggan menarik data dari publikasi yang mereka berlangganan.

Replikasi logis memberi Anda kontrol halus atas replikasi dan keamanan data. Anda dapat menggunakan replikasi logis dalam kasus penggunaan berikut:
+ Mereplikasi antara berbagai versi utama PostgreSQL
+ Mereplikasi antara instance PostgreSQL pada platform yang berbeda (misalnya, Linux ke Windows)

## Arsitektur
<a name="architecture-logical-replication"></a>

Langkah-langkah alur kerja berikut menunjukkan cara kerja arsitektur replikasi logis:

1. Anda mengambil snapshot data pada database penerbit dan menyalin data itu ke database pelanggan.

1. Perubahan dalam database penerbit dikirim ke pelanggan secara real time.

1. Pelanggan menerapkan data dalam urutan yang sama dengan penerbit sehingga konsistensi transaksional dijamin untuk publikasi dalam satu langganan.

*Publikasi* dapat didefinisikan pada contoh utama (penerbit). Publikasi adalah serangkaian perubahan yang dihasilkan dari tabel atau sekelompok tabel. Anda dapat memilih perubahan dari kombinasi operasi INSERT, UPDATE, DELETE, dan TRUNCATE. Secara default, semua perubahan ini direplikasi ke database pelanggan. Ini berbeda dengan replikasi fisik, di mana alamat blok yang tepat digunakan untuk byte-by-byte replikasi.

Tabel yang diterbitkan harus memiliki [IDENTITAS REPLIKA yang](https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY) dikonfigurasi untuk mereplikasi operasi UPDATE dan DELETE sehingga baris yang sesuai untuk memperbarui atau menghapus dapat diidentifikasi di sisi pelanggan. Dalam kebanyakan kasus, identitas replika ditentukan oleh kunci primer atau kunci unik. Jika kunci utama tidak ada dan Anda tidak dapat membuatnya, maka Anda dapat mengatur identitas replika ke`full`. Ini berarti seluruh baris menjadi kuncinya. Kami menyarankan Anda mengatur identitas replika `full` sebagai upaya terakhir karena pengaturan ini tidak efisien.

*Langganan* adalah sisi hilir dari replikasi logis. Node di mana langganan didefinisikan disebut sebagai *pelanggan*. Langganan mendefinisikan koneksi ke database lain dan kumpulan publikasi (satu atau lebih) yang ingin dilanggankannya.

## Pengaturan konfigurasi
<a name="config-settings"></a>

Konfigurasi berikut diperlukan untuk pengaturan penerbit:
+ Setel `wal_level` ke`logical`.
+ Atur `max_replication_slots` untuk mengakomodasi setidaknya jumlah langganan yang diharapkan untuk terhubung dan beberapa slot cadangan untuk sinkronisasi tabel.
+ Atur `max_wal_senders` untuk mengakomodasi `max_replication_slots` dan jumlah replika fisik Anda.

Konfigurasi berikut diperlukan untuk pengaturan pelanggan:
+ Atur `max_replication_slots` untuk mengakomodasi jumlah langganan paling sedikit yang Anda rencanakan untuk ditambahkan ke pelanggan dan beberapa langganan cadangan untuk sinkronisasi tabel.
+ Atur `max_logical_replication_workers` untuk mengakomodasi setidaknya jumlah langganan dan beberapa pekerja cadangan untuk sinkronisasi tabel.
+ Setel `max_worker_processes` setidaknya ke (`max_logical_replication_workers`\+`1`).

Setiap langganan menerima perubahan melalui satu slot replikasi.

Langkah-langkah berikut menunjukkan cara melakukan replikasi logis:

1. Buat penerbit dengan menggunakan perintah [CREATE PUBLICATION](https://www.postgresql.org/docs/10/sql-createpublication.html) untuk sekelompok tabel (yang akan menjadi bagian dari replikasi) dalam database sumber.

1. Buat pelanggan dengan menggunakan perintah [CREATE SUBSCRIPTION](https://www.postgresql.org/docs/10/sql-createsubscription.html), lalu berikan detail publikasi saat Anda membuat pelanggan.

1. Pemuatan data awal secara otomatis dimulai dari database sumber ke database target.

1. Data perubahan yang ditangkap oleh slot replikasi direplikasi ke database target.

1. Gunakan [pg\_stat\_replication](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-REPLICATION-VIEW) (tabel katalog) untuk memeriksa status replikasi. Gunakan [pg\_stat\_replication\_slots untuk memeriksa slot replikasi.](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-REPLICATION-SLOTS-VIEW)

Untuk informasi selengkapnya, lihat [Menggunakan replikasi logis untuk mereplikasi postingan Amazon RDS for PostgreSQL terkelola dan Amazon Aurora ke PostgreSQL yang dikelola](https://aws.amazon.com/blogs/database/using-logical-replication-to-replicate-managed-amazon-rds-for-postgresql-and-amazon-aurora-to-self-managed-postgresql/) sendiri di Blog Database AWS.

## Batasan
<a name="limitations-logical-replication"></a>

Kami menyarankan Anda mempertimbangkan batasan berikut dari metode replikasi logis sebelum memulai migrasi Anda:
+ Replikasi logis saat ini memiliki batasan dan kesenjangan fungsionalitas paling banyak.
+ Replikasi logis tidak dapat mereplikasi bahasa definisi data (DDL), urutan, dan operasi objek besar. Tindakan memotong (yang berlaku untuk tabel dengan kunci asing) harus menyertakan tabel terkait dalam langganan yang sama.

Untuk informasi lebih lanjut tentang keterbatasan replikasi logis, lihat [31.6. Pembatasan](https://www.postgresql.org/docs/current/logical-replication-restrictions.html) dalam dokumentasi PostgreSQL.