Re: BUG #11867: Strange behaviour with composite types after resetting database tablespace

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-hackers(at)postgreSQL(dot)org
Cc: marc(at)bloodnok(dot)com, pgsql-bugs(at)postgreSQL(dot)org
Subject: Re: BUG #11867: Strange behaviour with composite types after resetting database tablespace
Date: 2014-11-04 16:45:51
Message-ID: 19835.1415119551@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

I wrote:
> However: at no point in this sequence did we flush the original catalog
> blocks out of shared buffers. Therefore, a read of the database's
> pg_class or pg_type at this point is likely to find the previous states of
> those pages (pre-composite-type-drop) as valid, matching entries, so that
> we skip reading the up-to-date page contents back from disk.

> A quick fix for this would be to issue DropDatabaseBuffers during
> movedb()

BTW, I wondered whether the exact same hazard didn't exist for ALTER TABLE
SET TABLESPACE. At first glance it looks bad, because ATExecSetTableSpace
doesn't forcibly drop old shared buffers for the moved table either.
Closer examination says we're safe though:

* The buffers will be dropped during smgrdounlink at end of transaction,
so you could only be at risk if you moved a table, modified it, and moved
it back in a single transaction.

* A new relfilenode will be assigned during each movement.

* When assigning a relfilenode during the move-back, we'd be certain to
choose a relfilenode different from the original one, because the old
relation still exists on-disk at this point.

So it's safe as things stand; but this seems a bit, um, rickety. Should
we insert a DropRelFileNodesAllBuffers call into ATExecSetTableSpace to
make it safer? It's kind of annoying to have to scan the buffer pool
twice, but I'm afraid that sometime in the future somebody will try to get
clever about optimizing away the end-of-transaction buffer pool scan, and
break this case. Or maybe I'm just worrying too much.

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Bernd Helmle 2014-11-04 18:23:21 Re: COPY TO returning empty result with parallel ALTER TABLE
Previous Message Marc Munro 2014-11-04 16:14:00 Re: [BUGS] BUG #11867: Strange behaviour with composite types after resetting database tablespace

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2014-11-04 16:58:42 Re: alter user set local_preload_libraries.
Previous Message Heikki Linnakangas 2014-11-04 16:33:34 Re: WAL format and API changes (9.5)