Appears there is a problem finding the opclass when indexing a domain.

CREATE DOMAIN newint as int4;
CREATE TABLE tab (col newint unique);
ERROR:  data type newint has no default operator class for access method
"btree"
        You must specify an operator class for the index or define a
        default operator class for the data type


Specifically, GetDefaultOpClass() finds 0 exact matches and 3 binary
compatible matches.  Fetching getBaseType() of the attribute fixes the
problem for domains (see attachment).

Rod Taylor
This commit is contained in:
Bruce Momjian 2002-08-15 02:53:35 +00:00
parent 45e2544584
commit 46aaa5dda3
1 changed files with 4 additions and 1 deletions

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.81 2002/08/07 21:45:01 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.82 2002/08/15 02:53:35 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@ -482,6 +482,9 @@ GetDefaultOpClass(Oid attrType, Oid accessMethodId)
Oid exactOid = InvalidOid;
Oid compatibleOid = InvalidOid;
/* It could be a domain */
attrType = getBaseType(attrType);
/*
* We scan through all the opclasses available for the access method,
* looking for one that is marked default and matches the target type