RDS for PostgreSQL, mantıksal günlük dosyalarını JSON biçiminde çıkarmak için wal2json eklentisini sunar.
Ön koşullar
-
Örneğiniz RDS for PostgreSQL 10 veya sonraki bir sürümü çalıştırır.
RDS for PostgreSQL 16 için küçük sürümün 20240830 veya daha yeni olması gerekir.
NotRDS for PostgreSQL 17 şu anda bu eklentiyi desteklemez.
wal_levelörnek parametresinilogicalolarak ayarlayın. Daha fazla bilgi için bkz. Örnek parametrelerini ayarlama.
Arka plan bilgileri
wal2json, WAL'yi ayrıştırarak INSERT ve UPDATE işlemleriyle oluşturulan kayıtlara erişen mantıksal bir kod çözme eklentisidir.
wal2json eklentisi, her işlem için tüm yeni ve eski kayıtları içeren bir JSON nesnesi oluşturur. İşlem zaman damgası, şema, veri türleri ve işlem kimliği gibi ek özellikler de dahil edilebilir. Daha fazla bilgi için bkz. SQL kullanarak JSON nesnelerini alma.
SQL kullanarak JSON nesnelerini alma
DMS kullanarak bir RDS for PostgreSQL veritabanında oturum açma.
-
Tabloları oluşturmak ve eklentiyi başlatmak için aşağıdaki komutları çalıştırın.
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');Notwal2json eklentisini
CREATE EXTENSIONkullanarak oluşturmanız gerekmez. Bunun yerine, eklenti mantıksal bir çoğaltma yuvası aracılığıyla yüklenir. -
Verileri değiştirmek için aşağıdaki komutları çalıştırın.
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; -
Günlük verilerini JSON biçiminde çıkarmak için aşağıdaki komutu çalıştırın.
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');Komut, WAL günlük verilerini JSON biçiminde döndürür. Bu veriler;
"kind": "insert","schema": "public","table": "table2_with_pk","columnnames": ["a", "b", "c"]ve"columntypes": ["integer", "character varying(30)", "timestamp without time zone"]gibi alanlarla hedef tablodaki ekleme işleminin ayrıntılarını içerir.NotÇıktıyı durdurmak ve kaynakları serbest bırakmak için aşağıdaki komutu çalıştırın:
SELECT 'stop' FROM pg_drop_replication_slot('test_slot');