Skip site navigation (1) Skip section navigation (2)

Re: Nested transactions and tuple header info

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>,Manfred Koizar <mkoi-pg(at)aon(dot)at>,David Blasby <dblasby(at)refractions(dot)net>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Nested transactions and tuple header info
Date: 2004-06-02 13:52:28
Message-ID: 23799.1086184348@sss.pgh.pa.us (view raw or flat)
Thread:
Lists: pgsql-hackers
Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> writes:
> Tom Lane wrote:
>> This is exactly the same argument as not being able to overwrite cmin.

> Basically the phantom xid's are a shorthand for saying the tuple was
> created by xid1 and deleted by xid2, both part of the same main
> transaction.

> A cursor looking at the rows has to recognize the xid is a phantom (via
> pg_subtrans) and look up the creation xid.

You still don't see the point.  Consider

	BEGIN;
	DECLARE CURSOR c1 FOR SELECT * FROM a ...;
	INSERT INTO a VALUES(...);	-- call this row x
	DECLARE CURSOR c2 FOR SELECT * FROM a ...;
	BEGIN;
	DELETE FROM a WHERE ...;	-- assume this deletes row x
	ROLLBACK;
	FETCH FROM c1;			-- must NOT see row x
	FETCH FROM c2;			-- must see row x

AFAICS your proposal does not support this.  The two cursors' snapshots
will differ only in the recorded current-cid for the outer transaction.
If the subtrans has overwritten xmin/cmin, there is no way to make that
decision correctly.

			regards, tom lane

In response to

Responses

pgsql-hackers by date

Next:From: Shridhar DaithankarDate: 2004-06-02 13:53:35
Subject: Re: Converting postgresql.conf parameters to kilobytes
Previous:From: Tom LaneDate: 2004-06-02 13:38:12
Subject: Re: ACLs versus ALTER OWNER

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group