pgsql: When truncating a relation in-place (eg during VACUUM), do not

From: tgl(at)postgresql(dot)org (Tom Lane)
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: When truncating a relation in-place (eg during VACUUM), do not
Date: 2006-11-20 01:08:10
Message-ID: 20061120010810.69BE19FA31F@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Log Message:
-----------
When truncating a relation in-place (eg during VACUUM), do not try to unlink
any no-longer-needed segments; just truncate them to zero bytes and leave
the files in place for possible future re-use. This avoids problems when
the segments are re-used due to relation growth shortly after truncation.
Before, the bgwriter, and possibly other backends, could still be holding
open file references to the old segment files, and would write dirty blocks
into those files where they'd disappear from the view of other processes.

Back-patch as far as 8.0. I believe the 7.x branches are not vulnerable,
because they had no bgwriter, and "blind" writes by other backends would
always be done via freshly-opened file references.

Tags:
----
REL8_0_STABLE

Modified Files:
--------------
pgsql/src/backend/storage/smgr:
md.c (r1.114 -> r1.114.4.1)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/storage/smgr/md.c.diff?r1=1.114&r2=1.114.4.1)

Browse pgsql-committers by date

  From Date Subject
Next Message User Hinoue 2006-11-20 11:35:27 psqlodbc - psqlodbc: The version is now 8.2.0202.
Previous Message Tom Lane 2006-11-20 01:08:02 pgsql: When truncating a relation in-place (eg during VACUUM), do not