]> granicus.if.org Git - postgresql/commitdiff
Changes made by Hiroshi Inoue and approved by Vadim.
authorTatsuo Ishii <ishii@postgresql.org>
Thu, 16 Sep 1999 09:08:56 +0000 (09:08 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Thu, 16 Sep 1999 09:08:56 +0000 (09:08 +0000)
See attached mail for more details.

-------------------------------------------------------------------
From: "Vadim Mikheev" <vadim@krs.ru>
To: "Hiroshi Inoue" <Inoue@tpf.co.jp>
References: <000201befa94$42fe04c0$2801007e@cadzone.tpf.co.jp>
Subject: Re: elog(ERROR) in vacuum
Date: Fri, 10 Sep 1999 10:27:10 +0900
Organization: OJSC Rostelecom (Krasnoyarsk)
Message-ID: <37D85E6E.5AFA126D@krs.ru>

Hiroshi Inoue wrote:
>
> Hello Vadim,
>
> I have a question about vacuum.
>
> VACUUM has a phase like commit which calls TransactionIdCommit().
> But if elog(ERROR) occured after that,the status of transaction is
> changed from XID_COMMIT to XID_ABORT.
>
> Seems to me this causes inconsistency.
> Shoudn't AbortTransaction() be changed not to call TransacionIdAbort()
> in case of vacuum.

You're right!
As usual -:)

Vadim

src/backend/access/transam/xact.c

index b6e19d614e2a265d5fa490f6485cf71e7ed9f5e5..1c5dae27be27da0835b999d5f6dc6792b47acde7 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.51 1999/09/09 16:25:35 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.52 1999/09/16 09:08:56 ishii Exp $
  *
  * NOTES
  *             Transaction aborts can now occur two ways:
@@ -736,7 +736,7 @@ RecordTransactionAbort()
         * this transaction id in the pg_log relation. We skip it
         * if no one shared buffer was changed by this transaction.
         */
-       if (SharedBufferChanged)
+       if (SharedBufferChanged && !TransactionIdDidCommit(xid))
                TransactionIdAbort(xid);
 
        ResetBufferPool();