rewriteheap.c bug: toast rows don't get XIDs matching their parents

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-hackers(at)postgreSQL(dot)org
Subject: rewriteheap.c bug: toast rows don't get XIDs matching their parents
Date: 2012-01-12 21:50:58
Message-ID: 16465.1326405058@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

While working on bug #6393 I was reminded of the truth of $SUBJECT: any
rows inserted into the new toast table will have the xmin of the CLUSTER
or VACUUM FULL operation, and invalid xmax, whereas their parent heap
rows will have xmin/xmax copied from the previous instance of the table.
This does not matter much for ordinary live heap rows, but it's also
necessary for CLUSTER/VACUUM FULL to copy recently-dead,
insert-in-progress, and delete-in-progress rows. In such cases, a later
plain VACUUM might reap the parent heap rows and not the toast rows,
leading to a storage leak that won't be recovered short of another
CLUSTER/VACUUM FULL.

I can't remember if we discussed this risk when the heap rewrite code
was written. I'm not sure it's worth fixing, but at the least it ought
to be documented in the comments in rewriteheap.c.

regards, tom lane

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Simon Riggs 2012-01-12 22:22:46 ERRCODE_READ_ONLY_SQL_TRANSACTION
Previous Message Thomas Munro 2012-01-12 21:18:52 Re: WIP -- renaming implicit sequences