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 ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers