From: | Tomas Vondra <tomas(dot)vondra(at)enterprisedb(dot)com> |
---|---|
To: | Amit Kapila <amit(dot)kapila16(at)gmail(dot)com> |
Cc: | Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com> |
Subject: | Re: logical decoding and replication of sequences, take 2 |
Date: | 2023-07-30 00:00:31 |
Message-ID: | 9a00c745-f934-ab64-738d-726f6deffab1@enterprisedb.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 7/29/23 14:38, Tomas Vondra wrote:
>
> ...
>
> The only idea how to improve that is we could keep the non-transactional
> changes (instead of applying them immediately), and then apply them on
> the nearest "commit". That'd mean it's subject to the position tracking,
> and the sequence would not go backwards, I think.
>
> So every time we decode a commit, we'd check if we decoded any sequence
> changes since the last commit, and merge them (a bit like a subxact).
>
> This would however also mean sequence changes from rolled-back xacts may
> not be replictated. I think that'd be fine, but IIRC Andres suggested
> it's a valid use case.
>
I wasn't sure how difficult would this approach be, so I experimented
with this today, and it's waaaay more complicated than I thought. In
fact, I'm not even sure how to do that ...
The part 0008 is an WIP patch where ReorderBufferQueueSequence does not
apply the non-transactional changes immediately, and instead adds the
changes to a top-level list. And then ReorderBufferCommit adds a fake
subxact with all sequence changes up to the commit LSN.
The challenging part is snapshot management - when applying the changes
immediately, we can simply build and use the current snapshot. But with
0008 it's not that simple - we don't even know into which transaction
will the sequence change get "injected". In fact, we don't even know if
the parent transaction will have a snapshot (if it only does nextval()
it may seem empty). I was thinking maybe we could "keep" the snapshots
for non-transactional changes, but I suspect it might confuse the main
transaction in some way.
I'm still not convinced this behavior would actually be desirable ...
regards
--
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
Attachment | Content-Type | Size |
---|---|---|
0001-Logical-decoding-of-sequences-20230730.patch | text/x-patch | 54.3 KB |
0002-Add-decoding-of-sequences-to-test_decoding-20230730.patch | text/x-patch | 20.6 KB |
0003-Add-decoding-of-sequences-to-built-in-repli-20230730.patch | text/x-patch | 256.8 KB |
0004-Catchup-up-to-a-LSN-after-copy-of-the-seque-20230730.patch | text/x-patch | 3.1 KB |
0005-use-page-LSN-for-sequences-20230730.patch | text/x-patch | 12.4 KB |
0006-per-transaction-hash-of-sequences-20230730.patch | text/x-patch | 17.0 KB |
0007-assert-checking-sequence-hash-20230730.patch | text/x-patch | 6.4 KB |
0008-try-adding-fake-transaction-with-sequence-c-20230730.patch | text/x-patch | 8.4 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Nathan Bossart | 2023-07-30 04:51:05 | Re: Faster "SET search_path" |
Previous Message | Thomas Munro | 2023-07-29 23:33:18 | Re: buildfarm instance bichir stuck |