O RDS for PostgreSQL oferece o plugin wal2json para gerar arquivos de log lógico no formato JSON.
Pré-requisitos
-
A instância executa o RDS for PostgreSQL 10 ou posterior.
Para o RDS for PostgreSQL 16, a versão secundária deve ser 20240830 ou posterior.
NotaAtualmente, o RDS for PostgreSQL 17 não suporta este plugin.
Defina o parâmetro da instância
wal_levelcomological. Para mais informações, consulte Definir parâmetros da instância.
Informações de contexto
O wal2json é um plugin de decodificação lógica que acessa tuplas geradas por operações INSERT e UPDATE ao analisar o WAL.
Esse plugin gera um objeto JSON para cada transação com todas as tuplas novas e antigas. Você também pode incluir propriedades adicionais, como timestamp da transação, schema, tipos de dados e ID da transação. Para mais informações, consulte Obter objetos JSON usando SQL.
Obter objetos JSON usando SQL
Faça login em um banco de dados RDS for PostgreSQL pelo DMS.
-
Execute os comandos a seguir para criar tabelas e inicializar o 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');NotaNão é necessário criar o plugin wal2json com
CREATE EXTENSION. O plugin é carregado para uso por meio de um slot de replicação lógica. -
Execute os comandos a seguir para modificar os dados.
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; -
Execute o comando a seguir para gerar os dados de log no formato JSON.
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');O comando retorna dados de log WAL no formato JSON. Esses dados detalham a operação de inserção na tabela de destino, incluindo campos como
"kind": "insert","schema": "public","table": "table2_with_pk","columnnames": ["a", "b", "c"]e"columntypes": ["integer", "character varying(30)", "timestamp without time zone"].NotaPara interromper a saída e liberar recursos, execute o seguinte comando:
SELECT 'stop' FROM pg_drop_replication_slot('test_slot');