Re: NULL's support in SP-GiST
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Oleg Bartunov <oleg@sai.msu.su>, Teodor Sigaev <teodor@sigaev.ru>
Cc: Pgsql Hackers <pgsql-hackers@postgresql.org>
Date: 2012-03-11T16:00:47Z
Lists: pgsql-hackers
Attachments
- spgist-nulls-0.9.patch (text/x-patch) patch
I wrote: > I think a better fix for the opclass API would be to do what I suggested > there: >> * Perhaps it'd be a good idea to move the loop over scankeys to inside >> the opclass consistent methods, ie call them just once to check all the >> scankeys. Then we could meaningfully define zero scankeys as a full >> index scan, and we would also get rid of redundant value reconstruction >> work when there's more than one scankey. I've committed that ... > I'm less sure about what to do to store nulls, but one idea is to have a > separate SPGiST tree storing only nulls and descending from its own root > page, similar to the idea in this patch of having a separate root page > for nulls. It'd be a tad less efficient than GIN-based storage for > large numbers of nulls, but you probably don't want to use SPGiST to > index columns with lots of nulls anyway. ... and attached is a WIP patch that handles nulls as a separate SPGiST tree. Tuple layouts are the same as before, but each page is marked as to whether it stores nulls or non-nulls. The cache mechanism is modified to keep separate sets of cached pages for the regular and nulls trees. I'm fairly happy with this from a code cleanliness point of view, and it passes the regression tests included in your patch (which I didn't append here). It still needs doc updates, and also I think that the WAL logic is probably broken --- the page-stores-nulls flag will probably need to be added to most of SPGiST's WAL record types. regards, tom lane