RDS PostgreSQL menyediakan plugin wal2json yang menghasilkan file log logis dalam format JSON untuk kemudahan pembacaan.
Prasyarat
Instans harus berupa RDS PostgreSQL 10 atau yang lebih baru.
Untuk RDS PostgreSQL 16, versi minor harus 20240830 atau yang lebih baru.
CatatanRDS PostgreSQL 17 saat ini tidak mendukung plugin ini.
Parameter instans wal_level harus disetel ke logis. Untuk informasi lebih lanjut, lihat Setel parameter instans.
Informasi latar belakang
wal2json adalah plugin dekode logis yang memungkinkan Anda mengakses tupel yang dihasilkan oleh operasi INSERT dan UPDATE serta mengurai konten dalam WAL.
Plugin wal2json menghasilkan objek JSON untuk setiap transaksi. Objek JSON mencakup semua tupel baru/lama, dan opsi tambahan dapat mencakup cap waktu transaksi, kualifikasi skema, tipe data, ID transaksi, dan properti lainnya. Untuk informasi lebih lanjut, lihat Dapatkan objek JSON melalui SQL.
Dapatkan objek JSON melalui SQL
Jalankan perintah berikut untuk membuat tabel dan menginisialisasi plugin.
CREATE TABLE table2_with_pk (a SERIAL, b VARCHAR(30), c TIMESTAMP NOT NULL, PRIMARY KEY(a, c)); CREATE TABLE table2_without_pk (a SERIAL, b NUMERIC(5,2), c TEXT); SELECT 'init' FROM pg_create_logical_replication_slot('test_slot', 'wal2json');CatatanPlugin wal2json tidak perlu dibuat melalui
CREATE EXTENSION. Sebagai gantinya, ia dimuat melalui slot replikasi logis untuk digunakan.Jalankan perintah berikut untuk mengubah data.
BEGIN; INSERT INTO table2_with_pk (b, c) VALUES('Backup and Restore', now()); INSERT INTO table2_with_pk (b, c) VALUES('Tuning', now()); INSERT INTO table2_with_pk (b, c) VALUES('Replication', now()); DELETE FROM table2_with_pk WHERE a < 3; INSERT INTO table2_without_pk (b, c) VALUES(2.34, 'Tapir'); UPDATE table2_without_pk SET c = 'Anta' WHERE c = 'Tapir'; COMMIT;Jalankan perintah berikut untuk mengeluarkan informasi log dalam format JSON.
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');
CatatanUntuk menghentikan keluaran dan melepaskan sumber daya, jalankan perintah berikut:
SELECT 'stop' FROM pg_drop_replication_slot('test_slot');