Thank you all for your responses to help me out. The below code worked for me... pasting it here (May be helpful for someone)
Relation heap; > ItemPointer ht_ctid; > heap = heap_open(50620, AccessShareLock); /* 50620 - Table/Relation Oid - > Hardcoded for better understanding */ ScanKeyInit(&skey, 1, BTEqualStrategyNumber, F_INT8EQ, Int64GetDatum(100)); > /* 100 is the Value of PK of which i'm doing a lookup*/ > scan = systable_beginscan(heap, 50624 , true, NULL, 1, &skey); // 50624 is > the Oid of PKIndex for this Table/Relation. tuple = systable_getnext(scan); > if (HeapTupleIsValid(tuple)){ > ht_ctid = &tuple->t_self; > } > systable_endscan(scan); > heap_close(heap, AccessShareLock); Hope this helps for some one. PS: You have to use different Procedure(F_INT8EQ/F_TEXTEQ etc..) and Datum Conversion functions(Int64GetDatum/CStringGetTextDatum etc..) in ScanKeyInit() function as per your PK Data Types. Thanks & Best Regards, - Mahi On Tue, May 2, 2017 at 5:59 PM, Tom Lane <t...@sss.pgh.pa.us> wrote: > Michael Paquier <michael.paqu...@gmail.com> writes: > > On Tue, May 2, 2017 at 6:12 PM, Mahi Gurram <teckym...@gmail.com> wrote: > >> Please suggest me the easiest way to lookup into PK's B-Tree index for > >> getting TIDs. > > > Why don't you just use SPI within your extension? No need to copy the > > logic for btree lookups this way. > > There's not actually that much code needed, though -- basically > index_beginscan, index_rescan, index_getnext, index_endscan. One possible > model to follow is systable_beginscan and friends, in genam.c. > > I think that you could possibly get away with just applying > systable_beginscan to random user tables, even. But it's at least a > conceptual mismatch, and there are some things in there, like the > test on IgnoreSystemIndexes, that you probably don't want. > > regards, tom lane >