Re: Support logical replication of DDLs
Andreas Karlsson <andreas@proxel.se>
From: Andreas Karlsson <andreas@proxel.se>
To: Vitaly Davydov <v.davydov@postgrespro.ru>,
pgsql-hackers@lists.postgresql.org
Date: 2026-02-09T13:40:42Z
Lists: pgsql-hackers, pgsql-general
On 2/2/26 5:04 PM, Vitaly Davydov wrote: > 1. Log into the WAL system catalog changes (tuples) suitable for logical > decoding (introduce a new wal_level = logical_ddl). I think, not all system > catalog changes are needed for decoding (not sure, we have to decode > pg_depend > changes). > > 2. Implement a decoder of system catalog changes, that can produce a > parse tree > using existing structures from parsenodes.h. > > 3. Based on the decoded parse tree, we can convert it into json or DDL SQL > statements in the output plugin. ParseTree to DDL SQL converter can be > built-in > into the core. Output plugin can decide which converter to use. DDL sql > can be > directly applied on the replica. > > 4. Another option is to create json/ddl-sql from system catalog changes > without > an intermediate representation, but, anyway, when we interpret system > catalog > changes we have to temporary save current data in some structures. > Parsenodes > is the already existing solution for it. With this approach how do you intend to handle DDL changes which alter data? To take a simple case we have the USING clause when altering a column. Maybe it is a fine limitation to just not support it but I am not convinced. Andreas
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add a run_as_owner option to subscriptions.
- 482675987bcd 16.0 cited
-
Refactor pgoutput_change().
- da324d6cd45b 16.0 cited
-
Print the correct aliases for DML target tables in ruleutils.
- df931e9ab35b 11.20 landed
- c8a5f1685fb7 15.3 landed
- 4efb4f0d4878 13.11 landed
- 3dd287c14fac 12.15 landed
- 393430f57544 16.0 landed
- 14345f3c6a7b 14.8 landed
-
Fix object identity string for transforms
- 9a312562314a 16.0 landed
-
Add grantable MAINTAIN privilege and pg_maintain role.
- 60684dd834a2 16.0 cited
-
Get rid of recursion-marker values in enum AlterTableType
- 840ff5f451cd 16.0 cited
-
Release cache tuple when no longer needed
- ed0fbc8e5ac9 15.0 cited
-
Empty search_path in logical replication apply worker and walsender.
- 11da97024abb 14.0 cited
-
Refactor format_type APIs to be more modular
- a26116c6cbf4 11.0 cited
-
Use wrappers of PG_DETOAST_DATUM_PACKED() more.
- 3a0d473192b2 10.0 cited