Re: [HACKERS] Regarding B-Tree Lookup
От | Mahi Gurram |
---|---|
Тема | Re: [HACKERS] Regarding B-Tree Lookup |
Дата | |
Msg-id | CAGg=Guf5w5rb8HzXktTWRNvU9G08ys2p5GgY=vnSnL_MjVgztA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] Regarding B-Tree Lookup (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-hackers |
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 <tgl@sss.pgh.pa.us> wrote:
Michael Paquier <michael.paquier@gmail.com> writes:
> On Tue, May 2, 2017 at 6:12 PM, Mahi Gurram <teckymahi@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
В списке pgsql-hackers по дате отправления: