Thread: 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 * * -----------------------------------------------------------------*****----------