Thread
-
Re: [SQL] Functional Indexes
Tom Lane <tgl@sss.pgh.pa.us> — 1999-02-06T17:27:47Z
"Bryan White" <bryan@arcamax.com> writes: > The documentation for CREATE INDEX implies that functions are allowed in > index definitions but when I execute: > create unique index idxtest on customer (lower(email)); > the result is: > ERROR: DefineIndex: (null) class not found > Should this work? Do I have the syntax wrong? I tried this wih 6.4.2 and found that it was only accepted if I explicitly identified which index operator class to use: play=> create table customer (email text); CREATE play=> create unique index idxtest on customer (lower(email)); ERROR: DefineIndex: class not found play=> create unique index idxtest on customer (lower(email) text_ops); CREATE play=> That'll do as a workaround for Bryan, but isn't this a bug? Surely the system ought to know what type the result of lower() is... regards, tom lane
-
Re: [SQL] Functional Indexes
Sascha Schumann <sas@schell.de> — 1999-02-08T00:28:26Z
On Sat, Feb 06, 1999 at 12:27:47PM -0500, Tom Lane wrote: > "Bryan White" <bryan@arcamax.com> writes: > > The documentation for CREATE INDEX implies that functions are allowed in > > index definitions but when I execute: > > create unique index idxtest on customer (lower(email)); > > the result is: > > ERROR: DefineIndex: (null) class not found > > Should this work? Do I have the syntax wrong? > > I tried this wih 6.4.2 and found that it was only accepted if I > explicitly identified which index operator class to use: > > play=> create table customer (email text); > CREATE > play=> create unique index idxtest on customer (lower(email)); > ERROR: DefineIndex: class not found > play=> create unique index idxtest on customer (lower(email) text_ops); > CREATE > play=> > > That'll do as a workaround for Bryan, but isn't this a bug? Surely > the system ought to know what type the result of lower() is... > > regards, tom lane I still have a problem with that ... edited typescript follows funweb=> \d userdat Table = userdat +----------------------------------+----------------------------------+-------+ | Field | Type | Length| +----------------------------------+----------------------------------+-------+ | username | varchar() not null | 30 | ... +----------------------------------+----------------------------------+-------+ Index: userdat_pkey funweb=> create unique index userdat_idx2 on userdat (lower(username) varchar_ops); ERROR: BuildFuncTupleDesc: function 'lower(varchar)' does not exist This error message looks very bogus to me. -- Regards, Sascha Schumann | Consultant | finger sas@schell.de | for PGP public key -
Re: [SQL] Functional Indexes
Marc Howard Zuckman <marc@fallon.classyad.com> — 1999-02-08T02:42:23Z
On Mon, 8 Feb 1999, Sascha Schumann wrote: > On Sat, Feb 06, 1999 at 12:27:47PM -0500, Tom Lane wrote: > > "Bryan White" <bryan@arcamax.com> writes: > > > The documentation for CREATE INDEX implies that functions are allowed in > > > index definitions but when I execute: > > > create unique index idxtest on customer (lower(email)); > > > the result is: > > > ERROR: DefineIndex: (null) class not found > > > Should this work? Do I have the syntax wrong? > > > > I tried this wih 6.4.2 and found that it was only accepted if I > > explicitly identified which index operator class to use: > > > > play=> create table customer (email text); > > CREATE > > play=> create unique index idxtest on customer (lower(email)); > > ERROR: DefineIndex: class not found > > play=> create unique index idxtest on customer (lower(email) text_ops); > > CREATE > > play=> > > > > That'll do as a workaround for Bryan, but isn't this a bug? Surely > > the system ought to know what type the result of lower() is... > > > > regards, tom lane > > I still have a problem with that ... edited typescript follows > > funweb=> \d userdat > Table = userdat > +----------------------------------+----------------------------------+-------+ > | Field | Type | Length| > +----------------------------------+----------------------------------+-------+ > | username | varchar() not null | 30 | > ... > +----------------------------------+----------------------------------+-------+ > Index: userdat_pkey > funweb=> create unique index userdat_idx2 on userdat (lower(username) > varchar_ops); > ERROR: BuildFuncTupleDesc: function 'lower(varchar)' does not exist > > This error message looks very bogus to me. > > -- > > Regards, > > Sascha Schumann | > Consultant | finger sas@schell.de > | for PGP public key > I don't think lower is defined for varchar arguments. consider redefining username as type text and using text_ops. This method worked on my system: stocks=> create table temptext (a text, b varchar(20)); CREATE stocks=> create index itemptext on temptext using btree(lower(a) text_ops) ; CREATE Your error reproduced: stocks=> create index i2temptext on temptext using btree(lower(b) text_ops) ; ERROR: BuildFuncTupleDesc: function 'lower(varchar)' does not exist Excerpt from function definitions( both return value and argument are text types): text |lower |text |lowercase Marc Zuckman marc@fallon.classyad.com _\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ _ Visit The Home and Condo MarketPlace _ _ http://www.ClassyAd.com _ _ _ _ FREE basic property listings/advertisements and searches. _ _ _ _ Try our premium, yet inexpensive services for a real _ _ selling or buying edge! _ _\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
-
Re: [HACKERS] Re: [SQL] Functional Indexes
Bruce Momjian <maillist@candle.pha.pa.us> — 1999-03-15T14:53:15Z
On the TODO list: * allow creation of functional indexes to use default types > "Bryan White" <bryan@arcamax.com> writes: > > The documentation for CREATE INDEX implies that functions are allowed in > > index definitions but when I execute: > > create unique index idxtest on customer (lower(email)); > > the result is: > > ERROR: DefineIndex: (null) class not found > > Should this work? Do I have the syntax wrong? > > I tried this wih 6.4.2 and found that it was only accepted if I > explicitly identified which index operator class to use: > > play=> create table customer (email text); > CREATE > play=> create unique index idxtest on customer (lower(email)); > ERROR: DefineIndex: class not found > play=> create unique index idxtest on customer (lower(email) text_ops); > CREATE > play=> > > That'll do as a workaround for Bryan, but isn't this a bug? Surely > the system ought to know what type the result of lower() is... > > regards, tom lane > > -- Bruce Momjian | http://www.op.net/~candle maillist@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026