Dalam artikel ini, kita akan membahas tentang penggunaan slot replikasi logical dalam PostgreSQL. Dalam beberapa kasus, Anda perlu membuat slot replikasi secara manual sebelum subscription dapat diaktifkan. Berikut adalah contoh-contoh dari prosedur tersebut.
Contoh 1: Tanpa Opsi Connect
Pertama-tama, kita akan membuat publikasi pub1
untuk contoh ini.
test_pub=# CREATE PUBLICATION pub1 FOR ALL TABLES;
CREATE PUBLICATION
Lalu, kita akan membuat subscription sub1
dengan opsi connect=false
.
test_sub=# CREATE SUBSCRIPTION sub1
test_sub-# CONNECTION 'host=localhost dbname=test_pub'
test_sub-# PUBLICATION pub1
test_sub-# WITH (connect=false);
WARNING: subscription was created, but is not connected
HINT: To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
CREATE SUBSCRIPTION
Pada server publisher, kita akan membuat slot replikasi dengan nama sub1
menggunakan perintah pg_create_logical_replication_slot
.
test_pub=# SELECT * FROM pg_create_logical_replication_slot('sub1', 'pgoutput');
slot_name | lsn
-----------+-----------
sub1 | 0/19404D0
(1 row)
Pada server subscriber, kita akan memperbarui subscription dan mengaktifkan replikasi.
test_sub=# ALTER SUBSCRIPTION sub1 ENABLE;
ALTER SUBSCRIPTION
test_sub=# ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION;
ALTER SUBSCRIPTION
Contoh 2: Dengan Opsi Connect=False dan Slot Name
Dalam contoh ini, kita akan membuat subscription sub1
dengan opsi connect=false
dan slot_name='myslot'
.
test_sub=# CREATE SUBSCRIPTION sub1
test_sub-# CONNECTION 'host=localhost dbname=test_pub'
test_sub-# PUBLICATION pub1
test_sub-# WITH (connect=false, slot_name='myslot');
WARNING: subscription was created, but is not connected
HINT: To initiate replication, you must manually create the replication slot, enable the subscription, and refresh the subscription.
CREATE SUBSCRIPTION
Pada server publisher, kita akan membuat slot replikasi dengan nama myslot
menggunakan perintah pg_create_logical_replication_slot
.
test_pub=# SELECT * FROM pg_create_logical_replication_slot('myslot', 'pgoutput');
slot_name | lsn
-----------+-----------
myslot | 0/19059A0
(1 row)
Pada server subscriber, kita akan memperbarui subscription dan mengaktifkan replikasi seperti sebelumnya.
test_sub=# ALTER SUBSCRIPTION sub1 ENABLE;
ALTER SUBSCRIPTION
test_sub=# ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION;
ALTER SUBSCRIPTION
Contoh 3: Dengan Slot Name NONE
Dalam contoh ini, kita akan membuat subscription sub1
dengan opsi slot_name=NONE
.
test_sub=# CREATE SUBSCRIPTION sub1
test_sub-# CONNECTION 'host=localhost dbname=test_pub'
test_sub-# PUBLICATION pub1
test_sub-# WITH (slot_name=NONE, enabled=false, create_slot=false);
CREATE SUBSCRIPTION
Pada server publisher, kita akan membuat slot replikasi dengan nama myslot
menggunakan perintah pg_create_logical_replication_slot
.
test_pub=# SELECT * FROM pg_create_logical_replication_slot('myslot', 'pgoutput');
slot_name | lsn
-----------+-----------
myslot | 0/1905930
(1 row)
Pada server subscriber, kita akan mengasosiasikan subscription dengan slot name yang baru dibuat.
test_sub=# ALTER SUBSCRIPTION sub1 SET (slot_name='myslot');
ALTER SUBSCRIPTION
Lalu, kita akan memperbarui subscription dan mengaktifkan replikasi seperti sebelumnya.
test_sub=# ALTER SUBSCRIPTION sub1 ENABLE;
ALTER SUBSCRIPTION
test_sub=# ALTER SUBSCRIPTION sub1 REFRESH PUBLICATION;
ALTER SUBSCRIPTION
Dalam keseluruhan, contoh-contoh di atas menunjukkan bahwa membuat slot replikasi logical secara manual dapat menjadi tahap penting dalam penggunaan replication logical PostgreSQL.