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). However, I have to wonder why GetDefaultOpClass doesn't simply use the first Binary Compatible opclass. When there is more than one usable it doesn't do anything useful.
Index: src/backend/commands/indexcmds.c =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/backend/commands/indexcmds.c,v retrieving revision 1.80 diff -c -r1.80 indexcmds.c *** src/backend/commands/indexcmds.c 2002/08/02 18:15:06 1.80 --- src/backend/commands/indexcmds.c 2002/08/11 21:14:13 *************** *** 482,487 **** --- 482,490 ---- 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
---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster