Fix handling of multi-column BRIN indexes
authorTomas Vondra <tomas.vondra@postgresql.org>
Sat, 18 Feb 2023 23:41:18 +0000 (00:41 +0100)
committerTomas Vondra <tomas.vondra@postgresql.org>
Sun, 19 Feb 2023 00:46:58 +0000 (01:46 +0100)
When evaluating clauses on multiple scan keys of a multi-column BRIN
index, we can stop processing as soon as we find a scan key eliminating
the range, and the range should not be added to tbe bitmap.

That's how it worked before 14, but since a681e3c107a the code treated
the range as matching if it matched at least the last scan key.

Backpatch to 14, where this code was introduced.

Backpatch-through: 14
Discussion: https://postgr.es/m/ebc18613-125e-60df-7520-fcbe0f9274fc%40enterprisedb.com

src/backend/access/brin/brin.c

index de1427a1e0ee6c46ddf8fd1c2fdbb63bdd9fe0b7..b5a5fa7b33469d7cfe67ee5137a57710646f5a5a 100644 (file)
@@ -686,6 +686,13 @@ bringetbitmap(IndexScanDesc scan, TIDBitmap *tbm)
                                                                break;
                                                }
                                        }
+
+                                       /*
+                                        * If we found a scan key eliminating the range, no need to
+                                        * check additional ones.
+                                        */
+                                       if (!addrange)
+                                               break;
                                }
                        }
                }