Re: logical decoding and replication of sequences
От | Tomas Vondra |
---|---|
Тема | Re: logical decoding and replication of sequences |
Дата | |
Msg-id | 90b4e402-3f07-14f4-deca-5eaca31f70a3@enterprisedb.com обсуждение исходный текст |
Ответ на | Re: logical decoding and replication of sequences (Tomas Vondra <tomas.vondra@enterprisedb.com>) |
Список | pgsql-hackers |
On 12/15/21 14:51, Tomas Vondra wrote: > On 12/15/21 14:20, Amit Kapila wrote: >> On Tue, Dec 14, 2021 at 7:02 AM Tomas Vondra >> <tomas.vondra@enterprisedb.com> wrote: >>> >>> Hi, >>> >>> here's an updated version of the patches, dealing with almost all of the >>> issues (at least in the 0001 and 0002 parts). The main changes: >>> >>> 1) I've removed the 'created' flag from fill_seq_with_data, as >>> discussed. I don't think it's needed by any of the parts (not even 0003, >>> AFAICS). We still need it in xl_seq_rec, though. >>> >>> 2) GetCurrentTransactionId() added to sequence.c are called only with >>> wal_level=logical, to minimize the overhead. >>> >>> >>> There's still one remaining problem, that I already explained in [1]. >>> The problem is that with this: >>> >>> BEGIN; >>> SELECT nextval('s') FROM generate_series(1,100); >>> ROLLBACK; >>> >>> >>> The root cause is that pg_current_wal_lsn() uses the LogwrtResult.Write, >>> which is updated by XLogFlush() - but only in RecordTransactionCommit. >>> Which makes sense, because only the committed stuff is "visible". >>> >>> But the non-transactional behavior of sequence decoding disagrees with >>> this, because now some of the changes from aborted transactions may be >>> replicated. Which means the wait_for_catchup() ends up not waiting for >>> the sequence change to be replicated. This is an issue for tests in >>> patch 0003, at least. >>> >>> My concern is this actually affects other places waiting for things >>> getting replicated :-/ >>> >> >> By any chance, will this impact synchronous replication as well which >> waits for commits to be replicated? >> > > Physical or logical replication? Physical is certainly not replicated. > Actually, I take that back. It does affect physical (sync) replication just as well, and I think it might be considered a data loss issue. I started a new thread to discuss that, so that it's not buried in this thread about logical replication. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
В списке pgsql-hackers по дате отправления: