RDS for PostgreSQL menyediakan plugin wal2json untuk menghasilkan log logis dalam format JSON.
Prasyarat
-
Instans menjalankan RDS for PostgreSQL versi 10 atau lebih baru.
Untuk RDS for PostgreSQL 16, versi minor harus 20240830 atau lebih baru.
CatatanRDS for PostgreSQL 17 saat ini tidak mendukung plugin ini.
-
Parameter instans
wal_levelharus diatur kelogical. Untuk informasi selengkapnya, lihat Setel parameter instans.
Informasi latar belakang
wal2json adalah plugin logical decoding yang mengakses tupel yang dihasilkan oleh operasi INSERT dan UPDATE melalui penguraian WAL.
Plugin wal2json menghasilkan objek JSON untuk setiap transaksi, yang berisi semua tupel lama dan baru. Anda juga dapat menyertakan properti tambahan seperti timestamp transaksi, skema, tipe data, dan ID transaksi. Untuk informasi selengkapnya, lihat Dapatkan objek JSON menggunakan SQL.
Dapatkan objek JSON menggunakan 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 menggunakan
CREATE EXTENSION. Sebagai gantinya, plugin dimuat untuk digunakan melalui saluran replikasi logis. -
Jalankan perintah berikut untuk memodifikasi 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 menghasilkan data log dalam format JSON.
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');Perintah ini mengembalikan data log WAL dalam format JSON. Data tersebut merinci operasi insert pada tabel target dengan bidang seperti
"kind": "insert","schema": "public","table": "table2_with_pk","columnnames": ["a", "b", "c"], dan"columntypes": ["integer", "character varying(30)", "timestamp without time zone"].CatatanUntuk menghentikan output dan melepaskan sumber daya, jalankan perintah berikut:
SELECT 'stop' FROM pg_drop_replication_slot('test_slot');