Hello,
I'm trying to print out the tuples in the b-tree nodes for analysis, but
when iterate over more than the first entry of the tuples (scanKey++), I
strangely get the error below on query execution:
ERROR: relation "simpletest" does not exist
LINE 1: SELECT * FROM simpletest WHERE id = 50;
Any help with reviewing my my small attached patch would be greatly
appreciated!
Regards,
Samuel Vogel
diff --git src/backend/access/nbtree/nbtsearch.c
src/backend/access/nbtree/nbtsearch.c
index
ac98589477b876cfc8470ea03fb39fa43d5ea9c5..e07ae925332a923da73eb2bb28809e79f4bd7a1b
100644
--- src/backend/access/nbtree/nbtsearch.c
+++ src/backend/access/nbtree/nbtsearch.c
@@ -203,6 +203,37 @@ _bt_moveright(Relation rel,
return buf;
}
+void
+_bt_printindextuple(Relation rel,
+ int keysz,
+ ScanKey scankey,
+ Page page,
+ OffsetNumber offnum)
+{
+ TupleDesc itupdesc = RelationGetDescr(rel);
+ BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page);
+ IndexTuple itup = (IndexTuple) PageGetItem(page,
PageGetItemId(page, offnum));;
+ int i;
+
+ fprintf(stdout, "%d: ", offnum);
+
+ for (i = 1; i <= keysz; i++)
+ {
+ Datum datum;
+ bool isNull;
+ int32 result;
+
+ datum = index_getattr(itup, scankey->sk_attno, itupdesc,
&isNull);
+
+ if (i > 1) fprintf(stdout, ", ");
+ fprintf(stdout, "%d", DatumGetInt32(datum));
+
+ scankey++;
+ }
+
+ fprintf(stdout, "\n");
+}
+
/*
* _bt_binsrch() -- Do a binary search for a key on a particular page.
*
@@ -260,6 +291,16 @@ _bt_binsrch(Relation rel,
if (high < low)
return low;
+ fprintf(stdout, "-----------------------\n");
+ fprintf(stdout, "low: %d, high: %d\n", low, high);
+
+ int j;
+ for (j = low; j <= high; j++) {
+ _bt_printindextuple(rel, keysz, scankey, page, j);
+ }
+
+ fprintf(stdout, "-----------------------\n");
+
/*
* Binary search to find the first key on the page >= scan key, or first
* key > scankey when nextkey is true.
diff --git src/include/access/nbtree.h src/include/access/nbtree.h
index
eef67f54b504e73b10d4e1b2f12472eeb8481ffa..25b86020af3bdb0e3d2f1c6e730c70a68fc6a9a1
100644
--- src/include/access/nbtree.h
+++ src/include/access/nbtree.h
@@ -643,6 +643,8 @@ extern int _bt_pagedel(Relation rel, Buffer buf, BTStack
stack);
/*
* prototypes for functions in nbtsearch.c
*/
+extern void _bt_printindextuple(Relation rel, int keysz,
+ ScanKey scankey, Page page, OffsetNumber offnum);
extern BTStack _bt_search(Relation rel,
int keysz, ScanKey scankey, bool nextkey,
Buffer *bufP, int access);
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers