Melakukan decoding logis
BERLAKU UNTUK: Azure Database for PostgreSQL - Server Tunggal
Penting
Azure Database for PostgreSQL - Server Tunggal berada di jalur penghentian. Kami sangat menyarankan Agar Anda meningkatkan ke Azure Database for PostgreSQL - Server Fleksibel. Untuk informasi selengkapnya tentang migrasi ke Azure Database for PostgreSQL - Server Fleksibel, lihat Apa yang terjadi pada Server Tunggal Azure Database for PostgreSQL?.
Decoding logis di PostgreSQL memungkinkan Anda untuk melakukan streaming perubahan data ke konsumen eksternal. Decoding logis populer digunakan untuk streaming acara dan mengubah skenario penangkapan data.
Decoding logis menggunakan plugin output untuk mengonversi log depan tulis (WAL) Postgres ke dalam format yang dapat dibaca. Azure Database for PostgreSQL menyediakan plugin output wal2json, test_decoding, dan pgoutput. pgoutput disediakan oleh PostgreSQL dari PostgreSQL versi 10 dan yang terbaru.
Untuk ringkasan cara kerja decoding logis Postgres, kunjungi blog kami.
Catatan
Replikasi logika yang menggunakan publikasi/langganan PostgreSQL tidak didukung dengan Azure Database for PostgreSQL - Server Tunggal.
Menyiapkan server Anda
Decoding logis dan replika baca bergantung pada log depan tulis (WAL) Postgres untuk informasi. Kedua fitur ini membutuhkan tingkat pengelogan yang berbeda dari Postgres. Pendekodean logis membutuhkan tingkat pengelogan yang lebih tinggi daripada replika baca.
Untuk mengonfigurasi tingkat pengelogan yang benar, gunakan parameter dukungan replikasi Azure. Dukungan replikasi Azure memiliki tiga opsi pengaturan:
- Nonaktif - Menempatkan informasi paling sedikit di WAL. Pengaturan ini tidak tersedia di sebagian besar server Azure Database for PostgreSQL.
- Replika - Lebih verbose daripada Nonaktif. Ini adalah tingkat pencatatan minimum yang diperlukan agar replika baca berfungsi. Pengaturan ini telah default di sebagian besar server.
- Logis - Lebih verbose daripada Replika. Ini adalah level minimum pengelogan agar dekode logis berfungsi. Replika baca juga berfungsi pada pengaturan ini.
Menggunakan Azure CLI
Tetapkan azure.replication_support ke
logical
.az postgres server configuration set --resource-group mygroup --server-name myserver --name azure.replication_support --value logical
Hidupkan ulang server untuk menerapkan perubahan .
az postgres server restart --resource-group mygroup --name myserver
Jika Anda menjalankan Postgres 9.5 atau 9.6, dan menggunakan akses jaringan publik, tambahkan aturan firewall untuk menyertakan alamat IP publik klien dari tempat Anda akan menjalankan replikasi logis. Nama aturan firewall harus menyertakan _replrule. Misalnya, test_replrule. Untuk membuat aturan firewall baru di server, jalankan perintah az postgres server firewall-rule create.
Menggunakan portal Azure
Tetapkan dukungan replikasi Azure ke logis Pilih Simpan.
Hidupkan ulang server untuk menerapkan perubahan dengan memilih Ya.
Jika Anda menjalankan Postgres 9.5 atau 9.6, dan menggunakan akses jaringan publik, tambahkan aturan firewall untuk menyertakan alamat IP publik klien dari tempat Anda akan menjalankan replikasi logis. Nama aturan firewall harus menyertakan _replrule. Misalnya, test_replrule. Kemudian pilih Simpan.
Melakukan decoding logis
Decoding logis dapat dikonsumsi melalui protokol streaming atau antarmuka SQL. Kedua metode menggunakan slot replikasi. Slot mewakili aliran perubahan dari satu database.
Menggunakan slot replikasi memerlukan hak replikasi Postgres. Saat ini, hak istimewa replikasi hanya tersedia untuk pengguna admin server.
Protokol Streaming
Mengonsumsi perubahan menggunakan protokol streaming seringkali lebih disukai. Anda dapat membuat konsumen/konektor Anda sendiri, atau menggunakan alat seperti Debezium.
Kunjungi dokumentasi wal2json untuk mengetahui contoh menggunakan protokol streaming dengan pg_recvlogical.
Antarmuka SQL
Dalam contoh di bawah ini, kami menggunakan antarmuka SQL dengan plugin wal2json.
Buat slot.
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');
Terbitkan perintah SQL. Contohnya:
CREATE TABLE a_table ( id varchar(40) NOT NULL, item varchar(40), PRIMARY KEY (id) ); INSERT INTO a_table (id, item) VALUES ('id1', 'item1'); DELETE FROM a_table WHERE id='id1';
Konsumsi perubahan.
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');
Output akan terlihat seperti ini:
{ "change": [ ] } { "change": [ { "kind": "insert", "schema": "public", "table": "a_table", "columnnames": ["id", "item"], "columntypes": ["character varying(40)", "character varying(40)"], "columnvalues": ["id1", "item1"] } ] } { "change": [ { "kind": "delete", "schema": "public", "table": "a_table", "oldkeys": { "keynames": ["id"], "keytypes": ["character varying(40)"], "keyvalues": ["id1"] } } ] }
Hilangkan slot setelah Anda selesai menggunakannya.
SELECT pg_drop_replication_slot('test_slot');
Memantau slot
Anda harus memantau decoding logis. Slot replikasi yang tidak digunakan harus dihilangkan. Slot bergantung pada log Postgres WAL dan katalog sistem yang relevan sampai perubahan telah dibaca oleh konsumen. Jika konsumen Anda gagal atau belum dikonfigurasi dengan benar, log yang tidak dikonsumsi akan menumpuk dan mengisi penyimpanan Anda. Selain itu, log yang tidak dikonsumsi meningkatkan risiko pengemasan ID transaksi. Kedua situasi ini dapat menyebabkan server menjadi tidak tersedia. Oleh karena itu, slot replikasi logis perlu dikonsumsi terus menerus. Jika slot replikasi logis tidak lagi digunakan, hilangkan segera.
Kolom 'aktif' dalam tampilan pg_replication_slots akan menunjukkan apakah ada konsumen yang tersambung ke slot.
SELECT * FROM pg_replication_slots;
Atur pemberitahuan pada Penyimpanan yang digunakan dan metrik Lag maksimum untuk memberi tahu Anda ketika nilai meningkat melewati ambang normal.
Penting
Anda harus menghilangkan slot replikasi yang tidak digunakan. Gagal melakukannya dapat menyebabkan server tidak tersedia.
Cara menghilangkan slot
Jika Anda tidak secara aktif mengonsumsi slot replikasi, Anda harus menghilangkannya.
Untuk menghilangkan slot replikasi yang disebut test_slot
menggunakan SQL:
SELECT pg_drop_replication_slot('test_slot');
Penting
Jika Anda berhenti menggunakan decoding logis, ubah azure.replication_support kembali ke replica
atau off
. Detail WAL yang dipertahankan oleh logical
akan berlebihan dan harus dinonaktifkan ketika decoding logis tidak digunakan.
Langkah berikutnya
- Kunjungi dokumentasi Postgres untuk mempelajari decoding logis lebih lanjut.
- Hubungi tim kami jika ada pertanyaan terkait decoding logis.
- Pelajari replika baca lebih lanjut.