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 →
  1. Add a run_as_owner option to subscriptions.

  2. Refactor pgoutput_change().

  3. Print the correct aliases for DML target tables in ruleutils.

  4. Fix object identity string for transforms

  5. Add grantable MAINTAIN privilege and pg_maintain role.

  6. Get rid of recursion-marker values in enum AlterTableType

  7. Release cache tuple when no longer needed

  8. Empty search_path in logical replication apply worker and walsender.

  9. Refactor format_type APIs to be more modular

  10. Use wrappers of PG_DETOAST_DATUM_PACKED() more.