wal2mongo

PostgreSQL logical decoding output plugin for MongoDB

Overview

PackageVersionCategoryLicenseLanguage
wal2mongo1.0.7ETLApache-2.0C
IDExtensionBinLibLoadCreateTrustRelocSchema
9640wal2mongoNoYesNoNoNoNo-
Relatedmongo_fdw wal2json decoderbufs decoder_raw documentdb pglogical test_decoding pgoutput

Version

TypeRepoVersionPG VerPackageDeps
EXTPIGSTY1.0.71817161514wal2mongo-
RPMPIGSTY1.0.71817161514wal2mongo_$v-
DEBPIGSTY1.0.71817161514postgresql-$v-wal2mongo-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64PIGSTY MISSPIGSTY MISS
el8.aarch64PIGSTY MISSPIGSTY MISS
el9.x86_64PIGSTY MISSPIGSTY MISS
el9.aarch64PIGSTY MISSPIGSTY MISS
el10.x86_64PIGSTY MISSPIGSTY MISS
el10.aarch64PIGSTY MISSPIGSTY MISS
d12.x86_64PIGSTY MISSPIGSTY MISS
d12.aarch64PIGSTY MISSPIGSTY MISS
d13.x86_64PIGSTY MISSPIGSTY MISS
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
d13.aarch64PIGSTY MISSPIGSTY MISS
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
u22.x86_64PIGSTY MISSPIGSTY MISS
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
u22.aarch64PIGSTY MISSPIGSTY MISS
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
u24.x86_64PIGSTY MISSPIGSTY MISS
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7
u24.aarch64PIGSTY MISSPIGSTY MISS
PIGSTY 1.0.7
PIGSTY 1.0.7
PIGSTY 1.0.7

Build

You can build the DEB packages for wal2mongo using pig build:

pig build pkg wal2mongo         # build DEB packages

Install

You can install wal2mongo directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:

pig repo add pgsql -u          # Add repo and update cache

Install the extension using pig or apt/yum/dnf:

pig install wal2mongo;          # Install for current active PG version
pig ext install -y wal2mongo -v 16  # PG 16
pig ext install -y wal2mongo -v 15  # PG 15
pig ext install -y wal2mongo -v 14  # PG 14
dnf install -y wal2mongo_16       # PG 16
dnf install -y wal2mongo_15       # PG 15
dnf install -y wal2mongo_14       # PG 14
apt install -y postgresql-16-wal2mongo   # PG 16
apt install -y postgresql-15-wal2mongo   # PG 15
apt install -y postgresql-14-wal2mongo   # PG 14

This extension does not require CREATE EXTENSION

Usage

wal2mongo: PostgreSQL logical decoding output plugin for MongoDB

A logical decoding output plugin that formats PostgreSQL WAL changes as MongoDB-compatible commands, enabling data replication from PostgreSQL to MongoDB.

Configuration

In postgresql.conf:

wal_level = logical
max_replication_slots = 10

Using with SQL Functions

-- Create a logical replication slot
SELECT * FROM pg_create_logical_replication_slot('w2m_slot', 'wal2mongo');

-- Perform DML operations
CREATE TABLE books (id SERIAL PRIMARY KEY, title VARCHAR(100), author VARCHAR(100));
INSERT INTO books (id, title, author) VALUES (123, 'My Book', 'Author');

-- Peek at changes (MongoDB format)
SELECT * FROM pg_logical_slot_peek_changes('w2m_slot', NULL, NULL);
-- Output: db.books.insertOne( { id:123, title:"My Book", author:"Author" } )

-- Consume changes
SELECT * FROM pg_logical_slot_get_changes('w2m_slot', NULL, NULL);

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

Using with pg_recvlogical

pg_recvlogical -d postgres --slot w2m_slot --create-slot -P wal2mongo
pg_recvlogical -d postgres --slot w2m_slot --start -f -

Replicating to MongoDB

The output can be applied directly in the MongoDB shell:

// Copy the output from pg_logical_slot_get_changes
db.books.insertOne( { id:123, title:"My Book", author:"Author" } )

Or save to a .js file and import:

mongo < changes.js

Output Format

  • INSERT: db.<table>.insertOne( { <columns> } )
  • UPDATE: db.<table>.updateOne( { <key> }, { $set: { <changes> } } )
  • DELETE: db.<table>.deleteOne( { <key> } )

Tables need a primary key or replica identity for UPDATE/DELETE operations to be captured.


Last Modified 2026-03-12: add pg extension catalog (95749bf)