Subject: Re: Index AmInsert Parameter Confused?

From: Matthias van de Meent <[email-masked]>
Date: Tue, 26 Sep 2023 18:45:05 +0200

On Tue, 26 Sept 2023 at 18:38, jacktby jacktby <[email-masked]> wrote:
>
> typedef bool (*aminsert_function) (Relation indexRelation,
>   Datum *values,
>   bool *isnull,
>   ItemPointer heap_tid,
>   Relation heapRelation,
>   IndexUniqueCheck checkUnique,
>   bool indexUnchanged,
>   struct IndexInfo *indexInfo);
>
> Why is there a heap_tid, We haven’t inserted the value, so where does it from ?

Index insertion only happens after the TableAM tuple has been
inserted. As indexes refer to locations in the heap, this TID contains
the TID of the table tuple that contains the indexed values, so that
the index knows which tuple to refer to.

Note that access/amapi.h describes only index AM APIs; it does not
cover the table AM APIs descibed in access/tableam.h

Kind regards,

Matthias van de Meent

---

From: jacktby jacktby <[email-masked]>
Date: Wed, 27 Sep 2023 11:03:40 +0800

> 2023年9月27日 00:45，Matthias van de Meent <[email-masked]> 写道：
> 
1.Thanks, so if we insert a tuple into a table which has a index on itself, pg will insert tuple into heap firstly, and the give the heaptid form heap to the Index am api right?
2. I’m trying to implement a new index, but I just need the data held in index table, I hope it’s not inserted into heap, because the all data I want can be in index table.