Greetings, * Kyotaro Horiguchi (horikyota....@gmail.com) wrote: > For fuel(?) of the discussion, I tried a very-quick PoC for in-place > ALTER TABLE SET LOGGED/UNLOGGED and resulted as attached. After some > trials of several ways, I drifted to the following way after poking > several ways. > > 1. Flip BM_PERMANENT of active buffers > 2. adding/removing init fork > 3. sync files, > 4. Flip pg_class.relpersistence. > > It always skips table copy in the SET UNLOGGED case, and only when > wal_level=minimal in the SET LOGGED case. Crash recovery seems > working by some brief testing by hand.
Somehow missed that this patch more-or-less does what I was referring to down-thread, but I did want to mention that it looks like it's missing a necessary FlushRelationBuffers() call before the sync, otherwise there could be dirty buffers for the relation that's being set to LOGGED (with wal_level=minimal), which wouldn't be good. See the comments above smgrimmedsync(). > Of course, I haven't performed intensive test on it. Reading through the thread, it didn't seem very clear, but we should definitely make sure that it does the right thing on replicas when going between unlogged and logged (and between logged and unlogged too), of course. Thanks, Stephen
signature.asc
Description: PGP signature