Hello, I figured out that it's not possible to use a hypothetical gin index, as the gincostestimate function try to retrieve some statistical data from the index meta page.
Attached patch fixes this. I believe this should be back-patched as was a2095f7fb5a57ea1794f25d029756d9a140fd429. Regards. -- Julien Rouhaud http://dalibo.com - http://dalibo.org
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 37fad86..24ffa3a 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -101,6 +101,7 @@ #include <math.h> #include "access/gin.h" +#include "access/gin_private.h" #include "access/htup_details.h" #include "access/sysattr.h" #include "catalog/index.h" @@ -7260,11 +7261,25 @@ gincostestimate(PG_FUNCTION_ARGS) qinfos = deconstruct_indexquals(path); /* - * Obtain statistic information from the meta page + * Obtain statistic information from the meta page if the index is not + * hypothetical. Otherwise set all the counters to 0, as it would be for an + * index that never got VACUUMed. */ - indexRel = index_open(index->indexoid, AccessShareLock); - ginGetStats(indexRel, &ginStats); - index_close(indexRel, AccessShareLock); + if (!index->hypothetical) + { + indexRel = index_open(index->indexoid, AccessShareLock); + ginGetStats(indexRel, &ginStats); + index_close(indexRel, AccessShareLock); + } + else + { + ginStats.nPendingPages = 0; + ginStats.nTotalPages = 0; + ginStats.nEntryPages = 0; + ginStats.nDataPages = 0; + ginStats.nEntries = 0; + ginStats.ginVersion = GIN_CURRENT_VERSION; + } numEntryPages = ginStats.nEntryPages; numDataPages = ginStats.nDataPages;
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers