]> granicus.if.org Git - postgresql/commitdiff
Relax overly strict sanity check for upgraded ancient databases
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 1 Mar 2018 21:07:46 +0000 (18:07 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 1 Mar 2018 21:07:46 +0000 (18:07 -0300)
Commit 4800f16a7ad0 added some sanity checks to ensure we don't
accidentally corrupt data, but in one of them we failed to consider the
effects of a database upgraded from 9.2 or earlier, where a tuple
exclusively locked prior to the upgrade has a slightly different bit
pattern.  Fix that by using the macro that we fixed in commit
74ebba84aeb6 for similar situations.

Reported-by: Alexandre Garcia
Reviewed-by: Andres Freund
Discussion: https://postgr.es/m/CAPYLKR6yxV4=pfW0Gwij7aPNiiPx+3ib4USVYnbuQdUtmkMaEA@mail.gmail.com

Andres suspects that this bug may have wider ranging consequences, but I
couldn't find anything.

src/backend/access/heap/heapam.c

index 20dc8107f1c863334efc8e02071d8df63b877e70..f4a55d0688d9fc96a21f2597ea6cdc9ec0a5cd2f 100644 (file)
@@ -6783,7 +6783,7 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple,
                         * independent of committedness, since a committed lock holder has
                         * released the lock).
                         */
-                       if (!(tuple->t_infomask & HEAP_XMAX_LOCK_ONLY) &&
+                       if (!HEAP_XMAX_IS_LOCKED_ONLY(tuple->t_infomask) &&
                                TransactionIdDidCommit(xid))
                                ereport(ERROR,
                                                (errcode(ERRCODE_DATA_CORRUPTED),