]> granicus.if.org Git - postgresql/commitdiff
Fail BRIN control functions during recovery explicitly
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 14 Jun 2018 16:51:32 +0000 (12:51 -0400)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 14 Jun 2018 16:51:32 +0000 (12:51 -0400)
They already fail anyway, but prior to this patch they raise an ugly
error message about a lock that cannot be acquired.  This just improves
the message.

Author: Masahiko Sawada
Reported-by: Masahiko Sawada
Discussion: https://postgr.es/m/CAD21AoBZau4g4_NUf3BKNd=CdYK+xaPdtJCzvOC1TxGdTiJx_Q@mail.gmail.com
Reviewed-by: Kuntal Ghosh, Alexander Korotkov, Simon Riggs, Michaël Paquier, Álvaro Herrera
src/backend/access/brin/brin.c

index 7f4600f18d6849369dd5c44e4fc2a5479cbadf9b..792aeb5ad622c405087eb51a40db316f3c56e33e 100644 (file)
@@ -868,6 +868,12 @@ brin_summarize_range(PG_FUNCTION_ARGS)
        Relation        heapRel;
        double          numSummarized = 0;
 
+       if (RecoveryInProgress())
+               ereport(ERROR,
+                               (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
+                                errmsg("recovery is in progress"),
+                                errhint("BRIN control functions cannot be executed during recovery.")));
+
        if (heapBlk64 > BRIN_ALL_BLOCKRANGES || heapBlk64 < 0)
        {
                char       *blk = psprintf(INT64_FORMAT, heapBlk64);
@@ -939,6 +945,12 @@ brin_desummarize_range(PG_FUNCTION_ARGS)
        Relation        indexRel;
        bool            done;
 
+       if (RecoveryInProgress())
+               ereport(ERROR,
+                               (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
+                                errmsg("recovery is in progress"),
+                                errhint("BRIN control functions cannot be executed during recovery.")));
+
        if (heapBlk64 > MaxBlockNumber || heapBlk64 < 0)
        {
                char       *blk = psprintf(INT64_FORMAT, heapBlk64);