Thread: index on aggregate function

index on aggregate function

From
Sascha Schumann
Date:
I somewhere read that it is possible to create an index on aggregate functions
in PostgreSQL. Which syntax do I have to use for it?

test=> CREATE TABLE test ( name VARCHAR(32) );
CREATE
test=> CREATE INDEX test_idx ON test lower(name);
ERROR:  parser: parse error at or near "lower"

gives me a parser error.

--

          Regards,

                            Sascha Schumann |
                                 Consultant | finger sas@schell.de
                                            | for PGP public key

Re: [SQL] index on aggregate function

From
Remigiusz Sokolowski
Date:
> I somewhere read that it is possible to create an index on aggregate functions
> in PostgreSQL. Which syntax do I have to use for it?
>
> test=> CREATE TABLE test ( name VARCHAR(32) );
> CREATE
> test=> CREATE INDEX test_idx ON test lower(name);
> ERROR:  parser: parse error at or near "lower"
>
> gives me a parser error.

Right syntax is
CREATE INDEX test_idx ON test (lower(name) text_ops);
I try it and index was generated without error
    Rem

-------------------------------------------------------------------*------------
Remigiusz Sokolowski      e-mail: rems@gdansk.sprint.pl           * *
-----------------------------------------------------------------*****----------


Re: [SQL] index on aggregate function

From
Sascha Schumann
Date:
On Mon, Feb 01, 1999 at 09:50:57AM +0100, Remigiusz Sokolowski wrote:
> > I somewhere read that it is possible to create an index on aggregate functions
> > in PostgreSQL. Which syntax do I have to use for it?
> >
> > test=> CREATE TABLE test ( name VARCHAR(32) );
> > CREATE
> > test=> CREATE INDEX test_idx ON test lower(name);
> > ERROR:  parser: parse error at or near "lower"
> >
> > gives me a parser error.
>
> Right syntax is
> CREATE INDEX test_idx ON test (lower(name) text_ops);
> I try it and index was generated without error
>     Rem

Well, that exact statement gives me:

ERROR: BuildFuncTupleDesc: function 'lower(varchar)' does not exist

I also tried varchar_ops and char_ops instead of text_ops, but that does not
resolve the problem. I'm using PostgreSQL 6.4.2 on Linux without problems so
far.

--

          Regards,

                            Sascha Schumann |
                                 Consultant | finger sas@schell.de
                                            | for PGP public key

Re: [SQL] index on aggregate function

From
Remigiusz Sokolowski
Date:
> > > I somewhere read that it is possible to create an index on aggregate functions
> > > in PostgreSQL. Which syntax do I have to use for it?
> > >
> > > test=> CREATE TABLE test ( name VARCHAR(32) );
> > > CREATE
> > > test=> CREATE INDEX test_idx ON test lower(name);
> > > ERROR:  parser: parse error at or near "lower"
> > >
> > > gives me a parser error.
> >
> > Right syntax is
> > CREATE INDEX test_idx ON test (lower(name) text_ops);
> > I try it and index was generated without error
> >     Rem
>
> Well, that exact statement gives me:
>
> ERROR: BuildFuncTupleDesc: function 'lower(varchar)' does not exist
>
> I also tried varchar_ops and char_ops instead of text_ops, but that does not
> resolve the problem. I'm using PostgreSQL 6.4.2 on Linux without problems so
> far.

I have holidays and now have to read so much mails, that I can't find if
there were any other suggestions about that. AFAIK there is no lower()
function for varchar type and this is a problem - solution is to use text
type or create function lower() for varchar type.
    Rem

-------------------------------------------------------------------*------------
Remigiusz Sokolowski      e-mail: rems@gdansk.sprint.pl           * *
-----------------------------------------------------------------*****----------


Re: [SQL] index on aggregate function

From
"jose' soares"
Date:

Remigiusz Sokolowski ha scritto:

> > > > I somewhere read that it is possible to create an index on aggregate functions
> > > > in PostgreSQL. Which syntax do I have to use for it?
> > > >
> > > > test=> CREATE TABLE test ( name VARCHAR(32) );
> > > > CREATE
> > > > test=> CREATE INDEX test_idx ON test lower(name);
> > > > ERROR:  parser: parse error at or near "lower"
> > > >
> > > > gives me a parser error.
> > >
> > > Right syntax is
> > > CREATE INDEX test_idx ON test (lower(name) text_ops);
> > > I try it and index was generated without error
> > >     Rem
> >
> > Well, that exact statement gives me:
> >
> > ERROR: BuildFuncTupleDesc: function 'lower(varchar)' does not exist
> >
> > I also tried varchar_ops and char_ops instead of text_ops, but that does not
> > resolve the problem. I'm using PostgreSQL 6.4.2 on Linux without problems so
> > far.
>
> I have holidays and now have to read so much mails, that I can't find if
> there were any other suggestions about that. AFAIK there is no lower()
> function for varchar type and this is a problem - solution is to use text
> type or create function lower() for varchar type.
>         Rem
>
> -------------------------------------------------------------------*------------
> Remigiusz Sokolowski      e-mail: rems@gdansk.sprint.pl           * *
> -----------------------------------------------------------------*****----------

--lower() works with varchar...

prova=> CREATE TABLE test ( name VARCHAR(32) );
CREATE
prova=> insert into test values ('AAAA');
INSERT 188475 1
prova=> select lower(name) from test;
lower
-----
aaaa
(1 row)

but it doesn't work on create index...

prova=> drop table test;
DROP
prova=> CREATE TABLE test ( name VARCHAR(32) );
CREATE
prova=> CREATE INDEX test_idx ON test lower(nome);
ERROR:  parser: parse error at or near "lower"

--
                               - Jose' -

And behold, I tell you these things that ye may learn wisdom; that ye may
learn that when ye are in the service of your fellow beings ye are only
in the service of your God.                - Mosiah 2:17 -



Re: [SQL] index on aggregate function

From
Remigiusz Sokolowski
Date:
> --lower() works with varchar...
>
> prova=> CREATE TABLE test ( name VARCHAR(32) );
> CREATE
> prova=> insert into test values ('AAAA');
> INSERT 188475 1
> prova=> select lower(name) from test;
> lower
> -----
> aaaa
> (1 row)
>
> but it doesn't work on create index...
>
> prova=> drop table test;
> DROP
> prova=> CREATE TABLE test ( name VARCHAR(32) );
> CREATE
> prova=> CREATE INDEX test_idx ON test lower(nome);
> ERROR:  parser: parse error at or near "lower"

Yes, You're right - I check it now - strange thing - and I have nothing
more to say
    Rem

-------------------------------------------------------------------*------------
Remigiusz Sokolowski      e-mail: rems@gdansk.sprint.pl           * *
-----------------------------------------------------------------*****----------