Thread: ARRAYs and INDEXes ...

ARRAYs and INDEXes ...

From
"Marc G. Fournier"
Date:
Can't seem to find anything concerning this in the docs, and I don't think 
it is something that can be done, but figure I'll double check before I 
write it off completely ...

If I create a table:

CREATE TABLE customers (  customer_id SERIAL,  monthly_balance DECIMAL(7,2)[12]
);

Is it possible to create an INDEX on customers.monthly_balance such that I 
could do something like:

SELECT * FROM customers WHERE monthly_balance[6] = 0.00;

As an example ... or

SELECT * FROM customers WHERE 0.00 = any (monthly_balance);



----
Marc G. Fournier           Hub.Org Networking Services (http://www.hub.org)
Email: scrappy@hub.org           Yahoo!: yscrappy              ICQ: 7615664


Re: ARRAYs and INDEXes ...

From
Michael Fuhr
Date:
On Tue, Aug 16, 2005 at 01:54:13AM -0300, Marc G. Fournier wrote:
>
> CREATE TABLE customers (
>   customer_id SERIAL,
>   monthly_balance DECIMAL(7,2)[12]
> );
> 
> Is it possible to create an INDEX on customers.monthly_balance such that I 
> could do something like:
> 
> SELECT * FROM customers WHERE monthly_balance[6] = 0.00;

You could use expression indexes, one per month:

CREATE INDEX customers_mb_1_idx ON customers ((monthly_balance[1]));
CREATE INDEX customers_mb_2_idx ON customers ((monthly_balance[2]));
etc.

> SELECT * FROM customers WHERE 0.00 = any (monthly_balance);

Not sure about that one.

-- 
Michael Fuhr


Re: ARRAYs and INDEXes ...

From
Greg Stark
Date:
"Marc G. Fournier" <scrappy@postgresql.org> writes:

> SELECT * FROM customers WHERE monthly_balance[6] = 0.00;

This, like the other poster said, can be accomplished with a set of simple
expression indexes.

> As an example ... or
> 
> SELECT * FROM customers WHERE 0.00 = any (monthly_balance);

This would require a GiST index. Look at the intarray contrib module. I don't
think there's any equivalent for other data types. You might have to store
these values as fixed precision numbers and divide or multiple by 100 to
convert.

-- 
greg