Fail BRIN control functions during recovery explicitly
authorAlvaro Herrera
Thu, 14 Jun 2018 16:51:32 +0000 (12:51 -0400)
committerAlvaro Herrera
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 706b3ee8242ecbdb5eca4b8e704f1de5cc277444..ee1c4cc4f106445024ebaf5bad0867b0ba2c65d7 100644 (file)
@@ -788,6 +788,12 @@ brin_summarize_new_values(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.")));
+
    /*
     * We must lock table before index to avoid deadlocks.  However, if the
     * passed indexoid isn't an index then IndexGetRelation() will fail.