Decoderbufs adalah ekstensi output decoder logis PostgreSQL yang digunakan untuk replikasi logis dalam format Protocol Buffers.
Prasyarat
Decoderbufs didukung pada kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle) yang menjalankan mesin berikut:
PolarDB for PostgreSQL (Kompatibel dengan Oracle) 2.0 (versi revisi 2.0.14.1.0 atau lebih baru).
CatatanAnda dapat mengeksekusi pernyataan berikut untuk melihat versi revisi dari kluster PolarDB for PostgreSQL (Kompatibel dengan Oracle):
SHOW polar_version;Decoderbufs bergantung pada pustaka berikut:
PostgreSQL 9.6 atau lebih baru.
Protobuf-c: 1.2 atau lebih baru untuk serialisasi data.
PostGIS: 2.1 atau lebih baru untuk mendukung tipe Geo PostgreSQL.
Konfigurasi dan penggunaan
Decoderbufs dimuat secara otomatis secara default. Anda harus mengubah parameter wal_level menjadi logical.
Parameter ini dapat diubah di konsol. Untuk informasi lebih lanjut, lihat Konfigurasikan Parameter Kluster. Kluster akan memulai ulang setelah Anda mengubah parameter. Lanjutkan dengan hati-hati.
Contoh untuk replikasi logis:
Buat slot replikasi logis dan atur plugin codec ke decoderbufs.
SELECT * FROM pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs');Ubah tabel yang diterbitkan.
Lihat log WAL menggunakan mode debug decoderbufs.
SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');Dapatkan perubahan WAL menggunakan decoderbufs untuk memperbarui posisi WAL.
SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');Periksa posisi WAL dari replikator logis.
SELECT * FROM pg_replication_slots WHERE slot_type = 'logical';
Pemetaan tipe data
Tabel berikut mencantumkan bagaimana OID tipe PostgreSQL saat ini dipetakan ke bidang decoderbuf.
OID tipe PostgreSQL | Bidang Decoderbuf |
BOOLOID | datum_boolean |
INT2OID | datum_int32 |
INT4OID | datum_int32 |
INT8OID | datum_int64 |
OIDOID | datum_int64 |
FLOAT4OID | datum_float |
FLOAT8OID | datum_double |
NUMERICOID | datum_double |
CHAROID | datum_string |
VARCHAROID | datum_string |
BPCHAROID | datum_string |
TEXTOID | datum_string |
JSONOID | datum_string |
XMLOID | datum_string |
UUIDOID | datum_string |
TIMESTAMPOID | datum_string |
TIMESTAMPTZOID | datum_string |
BYTEAOID | datum_bytes |
POINTOID | datum_point |
Geometri PostGIS | datum_point |
Geografi PostGIS | datum_point |
Catatan penggunaan
Decoderbufs bergantung pada pustaka berikut:
PostgreSQL 9.6 atau lebih baru.
Protobuf-c: 1.2 atau lebih baru untuk serialisasi data.
PostGIS: 2.1 atau lebih baru untuk mendukung tipe Geo PostgreSQL.
Konfigurasi dan penggunaan
Decoderbufs dimuat secara otomatis secara default.
Anda dapat mengonfigurasi replikasi logis di file postgresql.conf.
# MODULES
shared_preload_libraries = 'decoderbufs'
# REPLICATION
wal_level = logical # minimal, archive, hot_standby, or logical (change requires restart)
max_wal_senders = 8 # max number of walsender processes (change requires restart)
wal_keep_segments = 4 # in logfile segments, 16MB each; 0 disables
#wal_sender_timeout = 60s # in milliseconds; 0 disables
max_replication_slots = 4 # max number of replication slots (change requires restart)Contoh untuk replikasi logis:
Buat slot replikasi logis dan atur plugin codec ke decoderbufs.
SELECT * FROM pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs');Ubah tabel yang diterbitkan.
Lihat log WAL menggunakan mode debug decoderbufs.
SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');Dapatkan perubahan WAL menggunakan decoderbufs untuk memperbarui posisi WAL.
SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');Periksa posisi WAL dari replikator logis.
SELECT * FROM pg_replication_slots WHERE slot_type = 'logical';
Pemetaan tipe data
Tabel berikut mencantumkan bagaimana OID tipe PostgreSQL saat ini dipetakan ke bidang decoderbuf.
OID tipe PostgreSQL | Bidang Decoderbuf |
BOOLOID | datum_boolean |
INT2OID | datum_int32 |
INT4OID | datum_int32 |
INT8OID | datum_int64 |
OIDOID | datum_int64 |
FLOAT4OID | datum_float |
FLOAT8OID | datum_double |
NUMERICOID | datum_double |
CHAROID | datum_string |
VARCHAROID | datum_string |
BPCHAROID | datum_string |
TEXTOID | datum_string |
JSONOID | datum_string |
XMLOID | datum_string |
UUIDOID | datum_string |
TIMESTAMPOID | datum_string |
TIMESTAMPTZOID | datum_string |
BYTEAOID | datum_bytes |
POINTOID | datum_point |
Geometri PostGIS | datum_point |
Geografi PostGIS | datum_point |