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 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
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
From | Date | Subject | |
---|---|---|---|
Next Message | Shridhar Daithankar | 2004-06-02 13:53:35 | Re: Converting postgresql.conf parameters to kilobytes |
Previous Message | Tom Lane | 2004-06-02 13:38:12 | Re: ACLs versus ALTER OWNER |