aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/async.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-08-16 13:48:11 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2011-08-16 13:48:11 -0400
commitf48e62274f48df5788eef8465198184450ab6ad8 (patch)
treec7b68642ecf43393cfff93b186033bf5666d13ed /src/backend/commands/async.c
parent45476031a54c12bebf2f209ea2b6fb3bfc905193 (diff)
downloadpostgresql-f48e62274f48df5788eef8465198184450ab6ad8.tar.gz
postgresql-f48e62274f48df5788eef8465198184450ab6ad8.zip
Preserve toast value OIDs in toast-swap-by-content for CLUSTER/VACUUM FULL.
This works around the problem that a catalog cache entry might contain a toast pointer that we try to dereference just as a VACUUM FULL completes on that catalog. We will see the sinval message on the cache entry when we acquire lock on the toast table, but by that point we've already told tuptoaster.c "here's the pointer to fetch", so it's difficult from a code structural standpoint to update the pointer before we use it. Much less painful to ensure that toast pointers are not invalidated in the first place. We have to add a bit of code to deal with the case that a value that previously wasn't toasted becomes so; but that should be a seldom-exercised corner case, so the inefficiency shouldn't be significant. Back-patch to 9.0. In prior versions, we didn't allow CLUSTER on system catalogs, and VACUUM FULL didn't result in reassignment of toast OIDs, so there was no problem.
Diffstat (limited to 'src/backend/commands/async.c')
0 files changed, 0 insertions, 0 deletions