Обсуждение: index on aggregate function
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
> 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 * *
-----------------------------------------------------------------*****----------
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
> > > 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 * *
-----------------------------------------------------------------*****----------
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 -
> --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 * *
-----------------------------------------------------------------*****----------