]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix missed ReleaseVariableStats() in intarray's _int_matchsel().
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 25 May 2026 22:15:49 +0000 (18:15 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 25 May 2026 22:15:49 +0000 (18:15 -0400)
Given a WHERE clause like "int[] @@ query_int" or "query_int ~~ int[]"
where the query_int side is a table column having statistics,
_int_matchsel() exited without remembering to free the statistics
tuple.  This would typically lead to warnings about cache refcount
leakage, like
  WARNING:  resource was not closed: cache pg_statistic (73), tuple 42/12 has count 1
It's been wrong since this code was added, in commit c6fbe6d6f.

Bug: #19492
Reported-by: Man Zeng <zengman@halodbtech.com>
Author: Man Zeng <zengman@halodbtech.com>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/19492-ddcd0e22399ef85a@postgresql.org
Backpatch-through: 14

contrib/intarray/_int_selfuncs.c

index 7624e57e306329956a1571271bfaacbfd55540e8..5df439a4f8a0f3c5e9c9fa408160f3bad4241e75 100644 (file)
@@ -152,7 +152,10 @@ _int_matchsel(PG_FUNCTION_ARGS)
         * query_int.
         */
        if (vardata.vartype != INT4ARRAYOID)
+       {
+               ReleaseVariableStats(vardata);
                PG_RETURN_FLOAT8(DEFAULT_EQ_SEL);
+       }
 
        /*
         * Can't do anything useful if the something is not a constant, either.