My high-level understanding is, that we should first clearly answer these two questions
1. What does Logical Decodng infrastructure make available to the decoding plugin call-backs 2. What the callbacks themselves do in case of DDL My answer to the 1. is "everything, as it should be the plugin that decides what it needs". It does not mean that we should always prepack everything with special logical decoding structures, but there should be a way to get at anything that is available in the WAL at least. The result is in WAL, and for DDL it is also in the system tables themselves, in proper time-travel way. For 2. I would prefer to "deparse" the DDL from actual system tables at that snapshot. In logical decoding the system tables are special in that we keep the actual table content and have real time travel capabilities on them. This should allow us to use the code we already have in pg_dump for extracting the "status quo DDL" meaning the DDL for creating everything from scratch. The main thing missing is DDL for ALTER and DROP which would need to be added. But that too should be in the plugin, not in the DDL side . On Tue, Apr 28, 2026 at 8:57 AM Amit Kapila <[email protected]> wrote: > On Mon, Apr 27, 2026 at 11:45 AM Dilip Kumar <[email protected]> > wrote: > > > > On Tue, Apr 21, 2026 at 4:45 AM Masahiko Sawada <[email protected]> > wrote: > > > > > > The overall idea of the previous patch set was to implement DDL > > > deparsing and utilize it for DDL replication. It converted a parse > > > tree into a JSON string. For instance, if a user executes "DROP TABLE > > > t1", the deparser generates from its parse tree: > > > > > > {DROPSTMT :objects (("t1")) :removeType 41 :behavior 0 :missing_ok > > > false :concurrent false} > > > > > > to: > > > > > > {"fmt": "DROP TABLE %{objidentity}s", "objidentity": "public.t1"} > > > > > > This JSON string is self-documenting, meaning someone who gets it can > > > easily reconstruct the original DDL with schema-qualified object > > > names. In a dedicated event trigger for logical replication, we > > > deparsed the parse tree of a DDL, wrote it into a WAL record, and then > > > the logical decoding processed it similarly to DML changes. > > > > I think there was also a discussion on whether to use JSON vs the > > existing infrastructure of converting nodes to strings. Although the > > JSON is standard format and might provide more flexibility using > > existing format avoid extra maintence burden. > > > > Yes, the discussion related to node-to-string and the pros and cons of > the deparse approach are detailed in email [1]. I think some of these > points could be also related to the new approach as well. > > [1] - > https://www.postgresql.org/message-id/OS0PR01MB571684CBF660D05B63B4412C94AB9%40OS0PR01MB5716.jpnprd01.prod.outlook.com > > -- > With Regards, > Amit Kapila. > > >
