Pendahuluan
Saat membaca tentang replikasi logis postgres, saya menemukan sejumlah contoh di internet menggunakan pg_logical_slot_get_changes dengan plugin “test_decoding“, tetapi saya tidak menemukan contoh yang menunjukkan cara menggunakan plugin default “pgoutput”. Jadi, inilah ringkasan singkatnya.
Langkah-Langkah
1. Pertama kita membutuhkan tabel untuk di replicate, maka kita coba create table terlebih dahulu.
CREATE TABLE demo_table_replicate (id integer);
2. Selanjutnya kita perlu membuat slot replicate logical. Anda memerlukan beberapa hal yang dikonfigurasi agar dapet berjalan di postgres
select pg_create_logical_replication_slot('my_slot', 'pgoutput');
3. Jika belum ada anda dapet membuat replication slot menggunakan replication protocol, dengan menjalankan perintah.
psql "dbname=postgres replication=database" -c "CREATE_REPLICATION_SLOT my_slot LOGICAL pgoutput;"
4. Sekarang kita dapat memeriksa parameter yang dibutuhkan oleh plugin pgoutput dengan memeriksa sumbernya di postgres.
contohnya :
static void parse_output_parameters(List *options, uint32 *protocol_version, List **publication_names) ...
Argumennya diberi nama proto_version dan publishing_names (periksa sumber tertaut untuk melihat di mana argumen tersebut didefinisikan).
Karena publishing_names adalah sebuah argumen, kita juga perlu membuat publikasi baru sebelum kita dapat melakukan perubahan apa pun.
CREATE PUBLICATION my_publication FOR ALL TABLES;
Mari tambahkan catatan ke demo_table_replicate .
INSERT INTO demo_table_replicate (id) values (1);
Sekarang kami memiliki semua yang kami perlukan untuk mencoba melakukan perubahan terbaru.
postgres=# SELECT * FROM pg_logical_slot_get_binary_changes('my_slot', NULL, NULL, 'proto_version', '1', 'publication_names', 'my_publication'); lsn | xid | data -----------+---------+------------------------------------- 1/2C8BD90 | 3733324 | \x420000000102c8bdd0000... 1/2C8BD90 | 3733324 | \x52000206d77075626c696... 1/2C8BD90 | 3733324 | \x49000206d74e000174000... 1/2C8BE00 | 3733324 | \x43000000000102c8bdd00... (4 rows)
Anda mungkin memperhatikan kami beralih dari pg_logical_slot_get_changes ke pg_logical_slot_get_binary_changes. Itu karena …get_changes mengharapkan data tekstual, dan mencoba menggunakannya bersama pgoutput tidak akan berhasil.
Itu saja! Kami dapat membuat logical replication slot menggunakan plugin pgoutput, membuat publikasi, dan memeriksa perubahan biner di demo_table_replicate .
Sekian Terima kasih