postgres.git / summary / log / commit / refs

commit    e7544c518ab0943fc85e2a4b44df9f7561ad2d0c
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 60fd163668f..43f4638a8a6 100644 --- a/contrib/intarray/_int_selfuncs.c +++ b/contrib/intarray/_int_selfuncs.c @@ -151,7 +151,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: cd777e27e203]