Thread: BUG #4806: Bug with GiST index and empty integer array?

BUG #4806: Bug with GiST index and empty integer array?

From
"Joerg Kiegeland"
Date:
The following bug has been logged online:

Bug reference:      4806
Logged by:          Joerg Kiegeland
Email address:      kiegeland@ikv.de
PostgreSQL version: PostgreSQL8.3.7
Operating system:   Windows XP
Description:        Bug with GiST index and empty integer array?
Details:

The GiST index seems not to be able to find empty integer arrays.

The bug can be easily reproduced on a simple test database:



To create the table and the data execute:

CREATE TABLE test_intarray_table (
    id text NOT NULL PRIMARY KEY,
    intarray_column integer[]
);

INSERT INTO test_intarray_table (id, intarray_column) VALUES ('x', '{}');

CREATE INDEX intarray_index ON test_intarray_table USING gist
(intarray_column);




To query the data execute:

SET ENABLE_SEQSCAN TO OFF; --disable sequential scan, which is performed for
small tables

SELECT * FROM test_intarray_table WHERE "intarray_column" = '{}';





The result set of this query does not include the row with id x, though the
condition should match! When deleting the index intarray_index, x is found!

So we proposed our customer to simply delete the index. However it goes
slower then. I would expect the GiST index to either report an error that
empty array queries are not supported (like GIN index does) or otherwise to
return the correct result, since the result of a query should be independent
of an index usage.

As we reduced this bug to this little example from a very large database and
a much larger query (took hours for this "simplification"), we disabled the
sequential scan, however in our large database we could reproduce this error
without disabling the sequential scan.

The bug also appears with PostgreSQL8.4 Beta and with PostgreSQL8.3.6.

Re: BUG #4806: Bug with GiST index and empty integer array?

From
Tom Lane
Date:
"Joerg Kiegeland" <kiegeland@ikv.de> writes:
> The GiST index seems not to be able to find empty integer arrays.

Yeah, this is a known issue.  We are looking into what can be done about
it for 8.4.

            regards, tom lane

Re: BUG #4806: Bug with GiST index and empty integer array?

From
Jörg Kiegeland
Date:
>
>
>> The GiST index seems not to be able to find empty integer arrays.
>>
>
> Yeah, this is a known issue.  We are looking into what can be done about
> it for 8.4.
>
Can you give me the bug ID if a similar bug is already reported?
I searched for such a bug before, but found nothing.
Then, I can keep track of the original bug, since my bug as duplicate
may be not cared for, I fear.

Thanks, Jörg



Re: BUG #4806: Bug with GiST index and empty integer array?

From
Bruce Momjian
Date:
I can reproduce this but in current CVS by installing /contrib/intarray.

---------------------------------------------------------------------------

Joerg Kiegeland wrote:
>
> The following bug has been logged online:
>
> Bug reference:      4806
> Logged by:          Joerg Kiegeland
> Email address:      kiegeland@ikv.de
> PostgreSQL version: PostgreSQL8.3.7
> Operating system:   Windows XP
> Description:        Bug with GiST index and empty integer array?
> Details:
>
> The GiST index seems not to be able to find empty integer arrays.
>
> The bug can be easily reproduced on a simple test database:
>
>
>
> To create the table and the data execute:
>
> CREATE TABLE test_intarray_table (
>     id text NOT NULL PRIMARY KEY,
>     intarray_column integer[]
> );
>
> INSERT INTO test_intarray_table (id, intarray_column) VALUES ('x', '{}');
>
> CREATE INDEX intarray_index ON test_intarray_table USING gist
> (intarray_column);
>
>
>
>
> To query the data execute:
>
> SET ENABLE_SEQSCAN TO OFF; --disable sequential scan, which is performed for
> small tables
>
> SELECT * FROM test_intarray_table WHERE "intarray_column" = '{}';
>
>
>
>
>
> The result set of this query does not include the row with id x, though the
> condition should match! When deleting the index intarray_index, x is found!
>
> So we proposed our customer to simply delete the index. However it goes
> slower then. I would expect the GiST index to either report an error that
> empty array queries are not supported (like GIN index does) or otherwise to
> return the correct result, since the result of a query should be independent
> of an index usage.
>
> As we reduced this bug to this little example from a very large database and
> a much larger query (took hours for this "simplification"), we disabled the
> sequential scan, however in our large database we could reproduce this error
> without disabling the sequential scan.
>
> The bug also appears with PostgreSQL8.4 Beta and with PostgreSQL8.3.6.
>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com
  PG East:  http://www.enterprisedb.com/community/nav-pg-east-2010.do
  + If your life is a hard drive, Christ can be your backup. +

Re: BUG #4806: Bug with GiST index and empty integer array?

From
Tom Lane
Date:
"Joerg Kiegeland" <kiegeland@ikv.de> writes:
> The following bug has been logged online:

> Bug reference:      4806
> Logged by:          Joerg Kiegeland
> Email address:      kiegeland@ikv.de
> PostgreSQL version: PostgreSQL8.3.7
> Operating system:   Windows XP
> Description:        Bug with GiST index and empty integer array?
> Details:

> The GiST index seems not to be able to find empty integer arrays.

Just for the archives' sake: this problem is now fixed, in both
GiST and GIN indexes, for 9.1.

            regards, tom lane