wal2json

wal2json

wal2json : Changing data capture in JSON format

Overview

IDExtensionPackageVersionCategoryLicenseLanguage
9630
wal2json
wal2json
2.6
ETL
BSD 3-Clause
C
AttributeHas BinaryHas LibraryNeed LoadHas DDLRelocatableTrusted
--s----
No
Yes
No
No
no
no
Relationships
See Also
pglogical
wal2mongo
decoderbufs
decoder_raw
kafka_fdw
pglogical_origin
pglogical_ticker
pg_failover_slots

Packages

TypeRepoVersionPG Major CompatibilityPackage PatternDependencies
EXT
PGDG
2.6
18
17
16
15
14
wal2json-
RPM
PGDG
2.6
18
17
16
15
14
wal2json_$v-
DEB
PGDG
2.6
18
17
16
15
14
postgresql-$v-wal2json-
Linux / PGPG18PG17PG16PG15PG14
el8.x86_64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
el8.aarch64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
el9.x86_64
PGDG 2.6
PGDG 2.6
PGDG 2.5
PGDG 2.5
PGDG 2.5
el9.aarch64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
el10.x86_64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
el10.aarch64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
d12.x86_64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
d12.aarch64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
d13.x86_64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
d13.aarch64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
u22.x86_64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
u22.aarch64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
u24.x86_64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
u24.aarch64
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PGDG 2.6
PackageVersionOSORGSIZEFile URL
wal2json_182.6el8.x86_64pgdg33.3 KiBwal2json_18-2.6-3PGDG.rhel8.x86_64.rpm
wal2json_182.6el8.x86_64pigsty31.4 KiBwal2json_18-2.6-1PIGSTY.el8.x86_64.rpm
wal2json_182.6el8.aarch64pgdg31.4 KiBwal2json_18-2.6-3PGDG.rhel8.aarch64.rpm
wal2json_182.6el8.aarch64pigsty29.5 KiBwal2json_18-2.6-1PIGSTY.el8.aarch64.rpm
wal2json_182.6el9.x86_64pgdg32.1 KiBwal2json_18-2.6-3PGDG.rhel9.x86_64.rpm
wal2json_182.6el9.x86_64pigsty31.8 KiBwal2json_18-2.6-1PIGSTY.el9.x86_64.rpm
wal2json_182.6el9.aarch64pgdg30.4 KiBwal2json_18-2.6-3PGDG.rhel9.aarch64.rpm
wal2json_182.6el9.aarch64pigsty30.1 KiBwal2json_18-2.6-1PIGSTY.el9.aarch64.rpm
wal2json_182.6el10.x86_64pgdg32.9 KiBwal2json_18-2.6-3PGDG.rhel10.x86_64.rpm
wal2json_182.6el10.aarch64pgdg31.3 KiBwal2json_18-2.6-3PGDG.rhel10.aarch64.rpm
postgresql-18-wal2json2.6d12.x86_64pgdg56.2 KiBpostgresql-18-wal2json_2.6-3.pgdg12+1_amd64.deb
postgresql-18-wal2json2.6d12.aarch64pgdg53.9 KiBpostgresql-18-wal2json_2.6-3.pgdg12+1_arm64.deb
postgresql-18-wal2json2.6d13.x86_64pgdg55.9 KiBpostgresql-18-wal2json_2.6-3.pgdg13+1_amd64.deb
postgresql-18-wal2json2.6d13.aarch64pgdg54.1 KiBpostgresql-18-wal2json_2.6-3.pgdg13+1_arm64.deb
postgresql-18-wal2json2.6u22.x86_64pgdg57.6 KiBpostgresql-18-wal2json_2.6-3.pgdg22.04+1_amd64.deb
postgresql-18-wal2json2.6u22.aarch64pgdg54.9 KiBpostgresql-18-wal2json_2.6-3.pgdg22.04+1_arm64.deb
postgresql-18-wal2json2.6u24.x86_64pgdg56.1 KiBpostgresql-18-wal2json_2.6-3.pgdg24.04+1_amd64.deb
postgresql-18-wal2json2.6u24.aarch64pgdg53.9 KiBpostgresql-18-wal2json_2.6-3.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
wal2json_152.6el8.x86_64pgdg33.2 KiBwal2json_15-2.6-1PGDG.rhel8.x86_64.rpm
wal2json_152.5el8.x86_64pgdg32.3 KiBwal2json_15-2.5-1.rhel8.x86_64.rpm
wal2json_152.6el8.aarch64pgdg31.3 KiBwal2json_15-2.6-1PGDG.rhel8.aarch64.rpm
wal2json_152.5el8.aarch64pgdg30.6 KiBwal2json_15-2.5-2.rhel8.aarch64.rpm
wal2json_152.5el8.aarch64pgdg30.6 KiBwal2json_15-2.5-1.rhel8.aarch64.rpm
wal2json_152.5el9.x86_64pgdg32.1 KiBwal2json_15-2.5-1.rhel9.x86_64.rpm
wal2json_152.6el9.aarch64pgdg30.7 KiBwal2json_15-2.6-1PGDG.rhel9.aarch64.rpm
wal2json_152.5el9.aarch64pgdg30.6 KiBwal2json_15-2.5-2.rhel9.aarch64.rpm
wal2json_152.5el9.aarch64pgdg30.5 KiBwal2json_15-2.5-1.rhel9.aarch64.rpm
wal2json_152.6el10.x86_64pgdg33.0 KiBwal2json_15-2.6-3PGDG.rhel10.x86_64.rpm
wal2json_152.6el10.aarch64pgdg31.4 KiBwal2json_15-2.6-3PGDG.rhel10.aarch64.rpm
postgresql-15-wal2json2.6d12.x86_64pgdg56.6 KiBpostgresql-15-wal2json_2.6-3.pgdg12+1_amd64.deb
postgresql-15-wal2json2.6d12.aarch64pgdg54.1 KiBpostgresql-15-wal2json_2.6-3.pgdg12+1_arm64.deb
postgresql-15-wal2json2.6d13.x86_64pgdg56.4 KiBpostgresql-15-wal2json_2.6-3.pgdg13+1_amd64.deb
postgresql-15-wal2json2.6d13.aarch64pgdg54.2 KiBpostgresql-15-wal2json_2.6-3.pgdg13+1_arm64.deb
postgresql-15-wal2json2.6u22.x86_64pgdg64.2 KiBpostgresql-15-wal2json_2.6-3.pgdg22.04+1_amd64.deb
postgresql-15-wal2json2.6u22.aarch64pgdg61.5 KiBpostgresql-15-wal2json_2.6-3.pgdg22.04+1_arm64.deb
postgresql-15-wal2json2.6u24.x86_64pgdg56.6 KiBpostgresql-15-wal2json_2.6-3.pgdg24.04+1_amd64.deb
postgresql-15-wal2json2.6u24.aarch64pgdg54.1 KiBpostgresql-15-wal2json_2.6-3.pgdg24.04+1_arm64.deb
PackageVersionOSORGSIZEFile URL
wal2json_142.6el8.x86_64pgdg33.2 KiBwal2json_14-2.6-1PGDG.rhel8.x86_64.rpm
wal2json_142.5el8.x86_64pgdg32.4 KiBwal2json_14-2.5-1.rhel8.x86_64.rpm
wal2json_142.4el8.x86_64pgdg76.4 KiBwal2json_14-2.4-1.rhel8.x86_64.rpm
wal2json_142.6el8.aarch64pgdg31.2 KiBwal2json_14-2.6-1PGDG.rhel8.aarch64.rpm
wal2json_142.5el8.aarch64pgdg30.6 KiBwal2json_14-2.5-2.rhel8.aarch64.rpm
wal2json_142.5el8.aarch64pgdg30.5 KiBwal2json_14-2.5-1.rhel8.aarch64.rpm
wal2json_142.5el9.x86_64pgdg32.1 KiBwal2json_14-2.5-1.rhel9.x86_64.rpm
wal2json_142.6el9.aarch64pgdg30.7 KiBwal2json_14-2.6-1PGDG.rhel9.aarch64.rpm
wal2json_142.5el9.aarch64pgdg30.6 KiBwal2json_14-2.5-2.rhel9.aarch64.rpm
wal2json_142.5el9.aarch64pgdg30.6 KiBwal2json_14-2.5-1.rhel9.aarch64.rpm
wal2json_142.6el10.x86_64pgdg32.9 KiBwal2json_14-2.6-3PGDG.rhel10.x86_64.rpm
wal2json_142.6el10.aarch64pgdg31.5 KiBwal2json_14-2.6-3PGDG.rhel10.aarch64.rpm
postgresql-14-wal2json2.6d12.x86_64pgdg56.2 KiBpostgresql-14-wal2json_2.6-3.pgdg12+1_amd64.deb
postgresql-14-wal2json2.6d12.aarch64pgdg53.8 KiBpostgresql-14-wal2json_2.6-3.pgdg12+1_arm64.deb
postgresql-14-wal2json2.6d13.x86_64pgdg56.1 KiBpostgresql-14-wal2json_2.6-3.pgdg13+1_amd64.deb
postgresql-14-wal2json2.6d13.aarch64pgdg53.9 KiBpostgresql-14-wal2json_2.6-3.pgdg13+1_arm64.deb
postgresql-14-wal2json2.6u22.x86_64pgdg64.3 KiBpostgresql-14-wal2json_2.6-3.pgdg22.04+1_amd64.deb
postgresql-14-wal2json2.6u22.aarch64pgdg61.5 KiBpostgresql-14-wal2json_2.6-3.pgdg22.04+1_arm64.deb
postgresql-14-wal2json2.6u24.x86_64pgdg56.2 KiBpostgresql-14-wal2json_2.6-3.pgdg24.04+1_amd64.deb
postgresql-14-wal2json2.6u24.aarch64pgdg53.7 KiBpostgresql-14-wal2json_2.6-3.pgdg24.04+1_arm64.deb

Source

Install

Make sure PGDG repo available:

pig repo add pgdg -u    # add pgdg repo and update cache

Install this extension with pig:

pig install wal2json;		# install via package name, for the active PG version

pig install wal2json -v 18;   # install for PG 18
pig install wal2json -v 17;   # install for PG 17
pig install wal2json -v 16;   # install for PG 16
pig install wal2json -v 15;   # install for PG 15
pig install wal2json -v 14;   # install for PG 14

This extension does not need CREATE EXTENSION DDL command

Usage

wal2json: Changing data capture in JSON format

A logical decoding output plugin that produces JSON-formatted change data capture from the PostgreSQL WAL.

Configuration

In postgresql.conf:

wal_level = logical
max_replication_slots = 10
max_wal_senders = 10

Using with Streaming Protocol (pg_recvlogical)

# Create a replication slot
pg_recvlogical -d postgres --slot test_slot --create-slot -P wal2json

# Start consuming changes
pg_recvlogical -d postgres --slot test_slot --start -o pretty-print=1 -f -

# Drop the slot when done
pg_recvlogical -d postgres --slot test_slot --drop-slot

Using with SQL Functions

-- Create a logical replication slot
SELECT * FROM pg_create_logical_replication_slot('test_slot', 'wal2json');

-- Peek at changes (does not consume)
SELECT data FROM pg_logical_slot_peek_changes('test_slot', NULL, NULL);

-- Get and consume changes
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL,
    'pretty-print', '1');

-- Drop the slot
SELECT pg_drop_replication_slot('test_slot');

Output Format v1 (JSON per transaction)

{
  "change": [
    {
      "kind": "insert",
      "schema": "public",
      "table": "my_table",
      "columnnames": ["a", "b"],
      "columntypes": ["integer", "text"],
      "columnvalues": [1, "hello"]
    },
    {
      "kind": "delete",
      "schema": "public",
      "table": "my_table",
      "oldkeys": {
        "keynames": ["a"],
        "keytypes": ["integer"],
        "keyvalues": [1]
      }
    }
  ]
}

Output Format v2 (JSON per tuple)

Enable with: 'format-version', '2'

Key Parameters

  • include-xids - add transaction ID (default: false)
  • include-timestamp - add timestamp (default: false)
  • include-schemas - add schema name (default: true)
  • include-types - add column types (default: true)
  • include-pk - add primary key info (default: false)
  • include-lsn - add WAL LSN (default: false)
  • include-not-null - add NOT NULL info (default: false)
  • include-default - add default expressions (default: false)
  • pretty-print - format JSON output (default: false)
  • filter-tables - comma-separated list of tables to include
  • add-tables - same as filter-tables
  • filter-msg-prefixes - filter logical messages by prefix
  • format-version - 1 (per-transaction) or 2 (per-tuple)
  • actions - filter by action type: insert, update, delete, truncate
Last updated on