Fix get_rels_with_domain to not do the wrong thing with views and
authorTom Lane
Wed, 5 May 2004 17:06:56 +0000 (17:06 +0000)
committerTom Lane
Wed, 5 May 2004 17:06:56 +0000 (17:06 +0000)
composite types that use a domain.

src/backend/commands/typecmds.c

index d081c38b7042623d290007f02e053a099ae17cbe..d76e048a3e748b4d348e40bbd665a0121546e047 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/commands/typecmds.c,v 1.53 2004/02/12 23:41:02 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/commands/typecmds.c,v 1.54 2004/05/05 17:06:56 tgl Exp $
  *
  * DESCRIPTION
  *   The "DefineFoo" routines take the parse tree and pick out the
@@ -1685,7 +1685,7 @@ get_rels_with_domain(Oid domainOid, LOCKMODE lockmode)
        Form_pg_attribute pg_att;
        int         ptr;
 
-       /* Ignore dependees that aren't user columns of tables */
+       /* Ignore dependees that aren't user columns of relations */
        /* (we assume system columns are never of domain types) */
        if (pg_depend->classid != RelOid_pg_class ||
            pg_depend->objsubid <= 0)
@@ -1709,7 +1709,14 @@ get_rels_with_domain(Oid domainOid, LOCKMODE lockmode)
            Relation    rel;
 
            /* Acquire requested lock on relation */
-           rel = heap_open(pg_depend->objid, lockmode);
+           rel = relation_open(pg_depend->objid, lockmode);
+
+           /* It could be a view or composite type; if so ignore it */
+           if (rel->rd_rel->relkind != RELKIND_RELATION)
+           {
+               relation_close(rel, lockmode);
+               continue;
+           }
 
            /* Build the RelToCheck entry with enough space for all atts */
            rtc = (RelToCheck *) palloc(sizeof(RelToCheck));