Re: Wrong usage of RelationNeedsWAL
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To: noah@leadboat.com
Cc: pgsql-hackers@postgresql.org, andres@anarazel.de
Date: 2021-01-18T08:30:22Z
Lists: pgsql-hackers
At Sun, 17 Jan 2021 23:02:18 -0800, Noah Misch <noah@leadboat.com> wrote in > On Sun, Jan 17, 2021 at 10:36:31PM -0800, Noah Misch wrote: > > I wrote the above based on the "PageGetLSN(page) > (snapshot)->lsn" check in > > TestForOldSnapshot(). If the LSN isn't important, what else explains > > RelationAllowsEarlyPruning() checking RelationNeedsWAL()? > > Thinking about it more, some RelationAllowsEarlyPruning() callers need > different treatment. Above, I was writing about the case of deciding whether > to do early pruning. The other RelationAllowsEarlyPruning() call sites are > deciding whether the relation might be lacking old data. For that case, we > should check RELPERSISTENCE_PERMANENT, not RelationNeedsWAL(). Otherwise, we > could fail to report an old-snapshot error in a case like this: > > setup: CREATE TABLE t AS SELECT ...; > xact1: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; -- take snapshot > xact2: DELETE FROM t; > (plenty of time passes) > xact3: SELECT count(*) FROM t; -- early pruning > xact1: SAVEPOINT q; SELECT count(*) FROM t; ROLLBACK TO q; -- "snapshot too old" > xact1: ALTER TABLE t SET TABLESPACE something; -- start skipping WAL > xact1: SELECT count(*) FROM t; -- no error, wanted "snapshot too old" > > Is that plausible? Thank you for the consideration and yes. But I get "snapshot too old" from the last query with the patched version. maybe I'm missing something. I'm going to investigate the case. regards. -- Kyotaro Horiguchi NTT Open Source Software Center
Commits
-
Revive "snapshot too old" with wal_level=minimal and SET TABLESPACE.
- d798ea750d22 13.2 landed
- 7da83415e5bc 14.0 landed
-
Fix error with CREATE PUBLICATION, wal_level=minimal, and new tables.
- e8e3e67490f5 13.2 landed
- 360bd2321b1a 14.0 landed
-
Skip WAL for new relfilenodes, under wal_level=minimal.
- c6b92041d385 13.0 cited