Thread

  1. 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
    
    
  2. 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
    
    
  3. 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!				      _
    _\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
    
    
    
  4. 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