#endif
#include "access/heapam.h"
#include "catalog/index.h"
+#if PG_VERSION_NUM >= 90600
+#include <catalog/pg_am.h>
+#endif
#include "miscadmin.h"
#include "storage/lmgr.h"
#include "catalog/namespace.h"
#if PG_VERSION_NUM >= 80300
#include <tsearch/ts_utils.h>
#endif
+#if PG_VERSION_NUM >= 100000
+#include <utils/regproc.h>
+#include <utils/varlena.h>
+#endif
#include <utils/tqual.h>
#include "utils/builtins.h"
#include "utils/lsyscache.h"
int maxlevel;
text *txt;
char *ptr;
- int len;
+ int len;
} IdxInfo;
static Relation checkOpenedRelation(Relation r, Oid PgAmOid);
static Relation
checkOpenedRelation(Relation r, Oid PgAmOid) {
- if ( r->rd_am == NULL )
+ if ( r->rd_index == NULL )
elog(ERROR, "Relation %s.%s is not an index",
get_namespace_name(RelationGetNamespace(r)),
RelationGetRelationName(r)
LockBuffer(st->buffer, GIN_UNLOCK);
#if PG_VERSION_NUM >= 90400
- stack = ginScanBeginPostingTree(&btree, st->index, rootblkno);
+ stack = ginScanBeginPostingTree(&btree, st->index, rootblkno
+#if PG_VERSION_NUM >= 90600
+ , NULL
+#endif
+ );
page = BufferGetPage(stack->buffer);
ItemPointerSetMin(&minItem);
list = GinDataLeafPageGetItems(page, &nlist, minItem);
char *relname=t2c(name);
ScanKeyData key;
#if PG_VERSION_NUM >= 80400
- TIDBitmap *bitmap = tbm_create(work_mem * 1024L);
+ TIDBitmap *bitmap = tbm_create(work_mem * 1024L
+#if PG_VERSION_NUM >= 100000
+ , NULL
+#endif
+ );
#else
#define MAXTIDS 1024
ItemPointerData tids[MAXTIDS];
BlockNumber blkno;
char res[1024];
uint32 totalPages,
+#if PG_VERSION_NUM >= 100000
+ deletedPages = 0,
+ emptyDataPages = 0,
+#endif
entryPages = 0,
dataPages = 0,
dataInnerPages = 0,
page = BufferGetPage(buffer);
header = (PageHeader)page;
+#if PG_VERSION_NUM >= 100000
+ if (GinPageIsDeleted(page))
+ {
+ deletedPages++;
+ }
+ else
+#endif
if (GinPageIsData(page))
{
dataPages++;
if (GinPageIsLeaf(page))
{
- ItemPointerData minItem;
+ ItemPointerData minItem, *ptr;
int nlist;
+
dataLeafPages++;
dataLeafFreeSpace += header->pd_upper - header->pd_lower;
ItemPointerSetMin(&minItem);
- pfree(GinDataLeafPageGetItems(page, &nlist, minItem));
- dataLeafIptrsCount += nlist;
+
+ ptr = GinDataLeafPageGetItems(page, &nlist, minItem);
+
+ if (ptr)
+ {
+ pfree(ptr);
+ dataLeafIptrsCount += nlist;
+ }
+ else
+ emptyDataPages++;
}
else
{
snprintf(res, sizeof(res),
"totalPages: %u\n"
+#if PG_VERSION_NUM >= 100000
+ "deletedPages: %u\n"
+ "emptyDataPages: %u\n"
+#endif
"dataPages: %u\n"
"dataInnerPages: %u\n"
"dataLeafPages: %u\n"
"entryAttrSize: " INT64_FORMAT "\n"
,
totalPages,
+#if PG_VERSION_NUM >= 100000
+ deletedPages,
+ emptyDataPages,
+#endif
dataPages,
dataInnerPages,
dataLeafPages,