Thread: User defined type - analyze problem

User defined type - analyze problem

From
Carsten Kropf
Date:
Hi *,
I have a little problem with a user defined type:
I constructed a type called "pointnd" which represents a multi-dimensional point. This point is subsequently used as an array type in another user defined type, like the following:
CREATE TYPE document AS (words tsvector, points _pointnd);

After some time, I have some problems with this type, obviously. The postgres process keeps on reporting the following line:
ERROR:  could not identify a comparison function for type pointnd
CONTEXT:  automatic analyze of table "test.public.documents"

I read somewhere, that this can be solved by preparing a operator class for btree and passing a comparison function for equality there. I did this with the following lines:
CREATE OPERATOR CLASS pointnd_btree_class
DEFAULT FOR TYPE pointnd USING btree AS
OPERATOR 3 =(pointnd, pointnd)
;

However, the postges process still reports the same errors after having set up the btree operator class.
How can I solve this issue?

Best regards
Carsten Kropf

Re: User defined type - analyze problem

From
Tom Lane
Date:
Carsten Kropf <ckropf2@fh-hof.de> writes:
> I read somewhere, that this can be solved by preparing a operator class for btree and passing a comparison function
forequality there. I did this with the following lines: 
> CREATE OPERATOR CLASS pointnd_btree_class
>     DEFAULT FOR TYPE pointnd USING btree AS
>     OPERATOR    3    =(pointnd, pointnd)
> ;

You need an actual, usable btree operator class, not one-sixth of one ...
this is lacking the other four operators and the support function.

            regards, tom lane

Re: User defined type - analyze problem

From
Carsten Kropf
Date:
Thanks a lot, this helped me with the messages. I thought, I would only have to define a operator class that fullfills
atleast the equals strategy. I didn't know, that I would have to provide a "full" btree operator class. 

Best regards
    Carsten Kropf
Am 03.05.2010 um 15:56 schrieb Tom Lane:

> Carsten Kropf <ckropf2@fh-hof.de> writes:
>> I read somewhere, that this can be solved by preparing a operator class for btree and passing a comparison function
forequality there. I did this with the following lines: 
>> CREATE OPERATOR CLASS pointnd_btree_class
>>     DEFAULT FOR TYPE pointnd USING btree AS
>>     OPERATOR    3    =(pointnd, pointnd)
>> ;
>
> You need an actual, usable btree operator class, not one-sixth of one ...
> this is lacking the other four operators and the support function.
>
>             regards, tom lane
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general