postgres.git / summary / log / commit / refs

commit    273be484aadd03b8f8d45dd3aa6768ab4512d702
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Mon May 25 22:15:49 2026 +0000
First released in: 14.24, 15.19, 16.15, 17.11, 18.6

    Fix missed ReleaseVariableStats() in intarray's _int_matchsel().
    
    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 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contrib/intarray/_int_selfuncs.c b/contrib/intarray/_int_selfuncs.c index 7624e57e306..5df439a4f8a 100644 --- a/contrib/intarray/_int_selfuncs.c +++ b/contrib/intarray/_int_selfuncs.c @@ -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. [parent: 0445c7667e3c]