Re: Regarding B-Tree Lookup

From: Mahi Gurram <teckymahi(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Michael Paquier <michael(dot)paquier(at)gmail(dot)com>, PostgreSQL mailing lists <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Regarding B-Tree Lookup
Date: 2017-05-23 11:06:19
Message-ID: CAGg=Guf5w5rb8HzXktTWRNvU9G08ys2p5GgY=vnSnL_MjVgztA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Michael Paquier <michael(dot)paquier(at)gmail(dot)com> writes:
> > On Tue, May 2, 2017 at 6:12 PM, Mahi Gurram <teckymahi(at)gmail(dot)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
>

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Amit Kapila 2017-05-23 11:11:39 Re: Increasing parallel workers at runtime
Previous Message Andrew Dunstan 2017-05-23 10:59:30 Re: PROVE_FLAGS