Re: operator classes for index?

From: Yves Weißig <weissig(at)rbg(dot)informatik(dot)tu-darmstadt(dot)de>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: operator classes for index?
Date: 2011-04-26 09:18:09
Message-ID: 4DB68DD1.8030005@rbg.informatik.tu-darmstadt.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Am 26.04.2011 01:15, schrieb Tom Lane:
> =?ISO-8859-15?Q?Yves_Wei=DFig?= <weissig(at)rbg(dot)informatik(dot)tu-darmstadt(dot)de> writes:
>> But anyway I am having trouble creating an operator class:
>
>> CREATE OPERATOR CLASS abstime_ops
>> DEFAULT FOR TYPE abstime USING ebi FAMILY abstime_ops AS
>> OPERATOR 1 = ,
>> FUNCTION 1 abstimeeq(abstime,abstime);
>
>> yields: ERROR: invalid procedure number 1, must be between 1 and 0
>
> Apparently you've got zero in pg_am.amsupport for your new index AM.
> You need to set that to the number of support-procedure types your AM
> defines. Have you been through
> http://developer.postgresql.org/pgdocs/postgres/indexam.html
> and the docs and source code for the pg_am, pg_amop, pg_amproc catalogs?
> See
> http://developer.postgresql.org/pgdocs/postgres/catalogs.html
> as well as the src/include/catalog/ files for those catalogs.
>
>> Additional, I don't know yet how to create index method support
>> routines. I want to re-use the hash functions from hashfunc.c (because I
>> do kind of a mapping). Is this possible?
>
> Just list them in your CREATE OPERATOR CLASS commands.

Alright, now I starting to get the point.
Still I have a problem, when I am trying to execute

CREATE OPERATOR CLASS abstime_ops
DEFAULT FOR TYPE abstime USING ebi FAMILY abstime_ops AS
OPERATOR 1 = (abstime,abstime),
FUNCTION 1 hashint4(abstime,abstime);

it yields: ERROR: function hashint4(abstime, abstime) does not exist
though it exists (it is part of the hash AM), do I have to note the
namespace or something else? pg_proc has a row for hashint4, but of
course with different parameter types, int4 namely. Where do I cast
them? Or is a implict conversion performed?

Thanks again!

>
>> How does index_getprocinfo();
>> now which support routine belongs to my index?
>
> It looks in pg_amproc to find the routines that are entered for the
> opclass associated with the index. This is a pretty direct
> representation of the FUNCTION entries from your previous CREATE
> OPERATOR CLASS (or if you prefer, CREATE OPERATOR CLASS is designed to
> provide the information needed to populate pg_amop and pg_amproc).
>
> regards, tom lane
>

Greetz, Yves

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Radosław Smogura 2011-04-26 11:59:45 Re: Improving the memory allocator
Previous Message Alexander Korotkov 2011-04-26 09:10:00 Re: GSoC 2011: Fast GiST index build