RDS for PostgreSQL fournit le plugin wal2json pour exporter les journaux logiques au format JSON.
Prérequis
-
L'instance exécute RDS for PostgreSQL 10 ou une version ultérieure.
Pour RDS for PostgreSQL 16, la version mineure doit être 20240830 ou une version ultérieure.
RemarqueRDS for PostgreSQL 17 ne prend pas actuellement en charge ce plugin.
Définissez le paramètre d'instance
wal_levelsurlogical. Pour plus d'informations, consultez la rubrique Définir les paramètres d'instance.
Contexte
wal2json est un plugin de décodage logique qui accède aux tuples générés par les opérations INSERT et UPDATE en analysant le WAL.
Le plugin wal2json génère un objet JSON pour chaque transaction, contenant tous les nouveaux et anciens tuples. Vous pouvez également inclure des propriétés supplémentaires telles que l'horodatage de la transaction, le schéma, les types de données et l'ID de transaction. Pour plus d'informations, consultez la section Obtenir des objets JSON à l'aide de SQL.
Obtenir des objets JSON à l'aide de SQL
Se connecter à une base de données RDS for PostgreSQL à l'aide de DMS.
-
Exécutez les commandes suivantes pour créer des tables et initialiser le 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');RemarqueIl n'est pas nécessaire de créer le plugin wal2json à l'aide de
CREATE EXTENSION. Le plugin est chargé et utilisé via un slot de réplication logique. -
Exécutez les commandes suivantes pour modifier les données.
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; -
Exécutez la commande suivante pour exporter les données du journal au format JSON.
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');La commande renvoie les données du journal WAL au format JSON. Ces données détaillent l'opération d'insertion sur la table cible avec des champs tels que
"kind": "insert","schema": "public","table": "table2_with_pk","columnnames": ["a", "b", "c"]et"columntypes": ["integer", "character varying(30)", "timestamp without time zone"].RemarquePour arrêter l'exportation et libérer les ressources, exécutez la commande suivante :
SELECT 'stop' FROM pg_drop_replication_slot('test_slot');