mirror of
https://github.com/postgres/postgres.git
synced 2025-06-20 15:22:23 +03:00
Teach SPGiST to store nulls and do whole-index scans.
This patch fixes the other major compatibility-breaking limitation of SPGiST, that it didn't store anything for null values of the indexed column, and so could not support whole-index scans or "x IS NULL" tests. The approach is to create a wholly separate search tree for the null entries, and use fixed "allTheSame" insertion and search rules when processing this tree, instead of calling the index opclass methods. This way the opclass methods do not need to worry about dealing with nulls. Catversion bump is for pg_am updates as well as the change in on-disk format of SPGiST indexes; there are some tweaks in SPGiST WAL records as well. Heavily rewritten version of a patch by Oleg Bartunov and Teodor Sigaev. (The original also stored nulls separately, but it reused GIN code to do so; which required undesirable compromises in the on-disk format, and would likely lead to bugs due to the GIN code being required to work in two very different contexts.)
This commit is contained in:
@ -100,6 +100,18 @@
|
||||
value when that is needed.
|
||||
</para>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
The <acronym>SP-GiST</acronym> core code takes care of NULL entries.
|
||||
Although <acronym>SP-GiST</acronym> indexes do store entries for nulls
|
||||
in indexed columns, this is hidden from the index operator class code:
|
||||
no null index entries or search conditions will ever be passed to the
|
||||
operator class methods. (It is assumed that <acronym>SP-GiST</acronym>
|
||||
operators are strict and so cannot succeed for NULL values.) NULLs
|
||||
are therefore not discussed further here.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
<para>
|
||||
There are five user-defined methods that an index operator class for
|
||||
<acronym>SP-GiST</acronym> must provide. All five follow the convention
|
||||
|
Reference in New Issue
Block a user