Re: POC: enable logical decoding when wal_level = 'replica' without a server restart
От | Amit Kapila |
---|---|
Тема | Re: POC: enable logical decoding when wal_level = 'replica' without a server restart |
Дата | |
Msg-id | CAA4eK1JQL5oQOwD=YTbSnKAq1reLLPkHkDf3qm-y9ZhTVC2J=Q@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: POC: enable logical decoding when wal_level = 'replica' without a server restart (Masahiko Sawada <sawada.mshk@gmail.com>) |
Ответы |
Re: POC: enable logical decoding when wal_level = 'replica' without a server restart
|
Список | pgsql-hackers |
On Sat, Sep 6, 2025 at 3:46 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote: > > I've attached the updated patch that incorporated all comments I got so far. > * + /* + * While all processes are using the new status, there could be some + * transactions that might have started with the old status. So wait + * for the running transactions to complete so that logical decoding + * doesn't include transactions that wrote WAL with insufficient + * information. + */ + running = GetRunningTransactionData(); + LWLockRelease(ProcArrayLock); + LWLockRelease(XidGenLock); + + elog(DEBUG1, "waiting for %d transactions to complete", running->xcnt); + + for (int i = 0; i < running->xcnt; i++) + { + TransactionId xid = running->xids[i]; + + if (TransactionIdIsCurrentTransactionId(xid)) + continue; + + XactLockTableWait(xid, NULL, NULL, XLTW_None); + } When building a snapshot during the start of logical decoding, we anyway wait for running transactions to finish via the snapbuild machinery. So, why do we need it here? And if it is needed, can we update the comments to explain why it is required in spite of snapbuild machinery doing similar thing? * Is it a good idea to enable/disable decoding for temporary logical slots? The temporary slots are released during ERROR or at session end, is that a good time to do the disable processing that even requires WAL writing. -- With Regards, Amit Kapila.
В списке pgsql-hackers по дате отправления: