Re: Is there anyway to create a TupleDesc with uint32 attribute easily? - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject Re: Is there anyway to create a TupleDesc with uint32 attribute easily?
Date
Msg-id 487C9240.5090900@enterprisedb.com
Whole thread Raw
In response to Is there anyway to create a TupleDesc with uint32 attribute easily?  ("Xiao Meng" <mx.cogito@gmail.com>)
Responses Re: Is there anyway to create a TupleDesc with uint32 attribute easily?  ("Xiao Meng" <mx.cogito@gmail.com>)
Re: Is there anyway to create a TupleDesc with uint32 attribute easily?  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Xiao Meng wrote:
> Hi, hackers.
> I'm working on my gsoc project - improving hash index.
> I need to create a TupldeDesc with uint32 attribute.
> Here is the reason why I need it -
> If we store hash code only in the tuple, then the TupleDesc's
> attribute should be uint32

Something along the lines of:

TupleDesc tupdesc = CreateTemplateTupleDesc(1, false);
TupleDescInitEntry(tupdesc, 1, "hashcode", INT4OID, -1, 0);

> In this way, we can use index_form_tuple() to create a tuple and
> needn't write a function for hash specially.

I would actually suggest ditching the normal page layout with line 
pointers and IndexTuples altogether. All the entries are fixed size, so 
you can get away with a much simpler structure, and store more entries 
per page. Storing an IndexTuple with one int32 column takes

(sizeof(IndexTupleData) + sizeof(uint32) + sizeof(ItemIdData)) = 16 bytes,

but you only need a pointer to the heap tuple, and the hash code, which 
is just 10 bytes in total. Or 12 if you have to align the hash code to 4 
byte boundary.

--   Heikki Linnakangas  EnterpriseDB   http://www.enterprisedb.com


pgsql-hackers by date:

Previous
From: Abhijit Menon-Sen
Date:
Subject: [PATCH] "\ef " in psql
Next
From: "Xiao Meng"
Date:
Subject: Re: Is there anyway to create a TupleDesc with uint32 attribute easily?