Re: Patches for TODO item: Avoid truncating empty OCDR temp tables on COMMIT

From: Gurjeet Singh <singh(dot)gurjeet(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PGSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Patches for TODO item: Avoid truncating empty OCDR temp tables on COMMIT
Date: 2013-01-15 04:13:19
Message-ID: CABwTF4Ugm0XZg57peUu_jiDrDbBCKy2d_04N_X=J=9tptGLBMQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Mon, Jan 14, 2013 at 10:33 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Gurjeet Singh <singh(dot)gurjeet(at)gmail(dot)com> writes:
> > Please find attached two patches, implementing two different approaches
> to
> > fix the issue of COMMIT truncating empty TEMP tables that have the ON
> > COMMIT DELETE ROWS attribute.
>
> > v2.patch: This approach introduces a boolean 'rd_rows_inserted' in
> > RelationData struct, and sets this struct to true for every TEMP table in
> > which a row is inserted. During commit, we avoid truncating those OCDR
> temp
> > tables that haven't been inserted into in this transaction.
>
> I think this is unacceptable on its face. It essentially supposes that
> relcache entries are reliable storage. They are not. There are some
> places where we rely on relcache entries preserving state information
> for optimization purposes --- but in this case, discarding a relcache
> entry would result in visibly incorrect behavior, not just some
> performance loss.
>

Would it be acceptable if we inverted the meaning of the struct member, and
named it to rd_rows_not_inserted. When registering an ON COMMIT action, we
can set this member to true, and set it to false when inserting a row into
it. The pre-commit hook will truncate any relation that doesn't have this
member set to true.

With that in place, even if the relcache entry is discarded midway through
the transaction, the cleanup code will truncate the relation, preserving
the correct behaviour.
--
Gurjeet Singh

http://gurjeet.singh.im/

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Gurjeet Singh 2013-01-15 04:18:19 Re: count(*) of zero rows returns 1
Previous Message Alvaro Herrera 2013-01-15 04:03:33 Re: count(*) of zero rows returns 1