Bruce Momjian <[EMAIL PROTECTED]> 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

---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to