On Sat, Jul 4, 2026 at 6:33 AM Dean Rasheed <[email protected]> wrote:
> So v6 now sets pg_class.relfrozenxid and pg_class.relminmxid to 0 for
> all global temporary relations, and only the pg_temp_class values are
> ever updated. That seems more logical, because a GTT has no storage
> until it is used by some session, so it makes sense for the frozen
> XIDs in pg_class to be 0.
Unfortunately, the cure seems to be worse than the disease:
-- Session 1
CREATE GLOBAL TEMPORARY TABLE g (a int);
-- Session 1 is no longer needed.
-- Session 2 (a fresh session that has never touched g)
BEGIN;
SELECT count(*) FROM g; -- first access here: queues g's pg_temp_class row
-- (still unflushed inside this transaction)
SAVEPOINT s1;
DROP TABLE g; -- removes that pending queue entry
ROLLBACK TO s1; -- pg_class row is restored by MVCC;
-- the queue entry is not restored
INSERT INTO g VALUES (1); -- the table still works normally
COMMIT;
-- The table is live and holds committed data:
SELECT count(*) AS live_rows FROM g;
-- live_rows
-- -----------
-- 1
-- The table cannot be vacuumed.
-- On assert builds it hits an assert. On production builds...
VACUUM g;
-- WARNING: bypassing nonessential maintenance of table
"john.public.g" as a failsafe after 0 index scans
-- DETAIL: The table's relfrozenxid or relminmxid is too far in the past.
-- HINT: Consider increasing configuration parameter
"maintenance_work_mem" or "autovacuum_work_mem".
-- You might also need to consider other ways for VACUUM to keep up
with the allocation of transaction IDs.
-- ERROR: cache lookup failed for global temp relation 16385
-- The error is because there is no matching row in pg_temp_class
SELECT count(*) AS temp_class_rows
FROM pg_temp_class
WHERE oid = 'g'::regclass;
-- temp_class_rows
-- -----------------
-- 0
-- ...so dropping doesn't work either:
DROP TABLE g;
-- ERROR: cache lookup failed for global temp relation 16385
I'm starting to think the queue mechanism needs serious attention, if
not a complete re-think.
On Mon, Jun 22, 2026 at 8:43 PM Andrew Dunstan <[email protected]> wrote:
> > On Jun 22, 2026, at 4:57 AM, Dean Rasheed <[email protected]> wrote:
> > Oh, wow. There's a lot of similarity between our patchsets, which is
> > reassuring, but there are also a number of differences, which I need
> > to think about in more detail.
>
> Yeah, agree on both fronts. The main areas I see are the catalog and handling
> wraparound. I don’t think there’s necessarily a clear winner on either, so
> I’ll be interested to hear what others say.
I was actually hoping to hear more about how the approaches differ so
we can weigh the architectural tradeoffs from both operational and
maintenance standpoints. (I suppose I just volunteered myself for
that, didn't I...)
--
John Naylor
Amazon Web Services