]> granicus.if.org Git - postgresql/commitdiff
Fix vacuum analyze error.
authorTatsuo Ishii <ishii@postgresql.org>
Tue, 27 Feb 2001 07:07:00 +0000 (07:07 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Tue, 27 Feb 2001 07:07:00 +0000 (07:07 +0000)
vacuum analyze on pg_type fails if bogus entries remain in pg_operator.
Here is a sample script to reproduce the problem.

drop table t1;
create table t1(i int);
drop function foo(t1,t1);
create function foo(t1,t1) returns bool as 'select true' language 'sql';
create operator = (
leftarg = t1,
rightarg = t1,
commutator = =,
procedure = foo
);
drop table t1;
vacuum analyze;

src/backend/parser/parse_coerce.c

index b91094216cb9e98b94a6a439591c6987e537b282..69731ff89e11480307240925ba01e80e07d2bc18 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.54 2001/01/24 19:43:01 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.55 2001/02/27 07:07:00 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -225,6 +225,12 @@ can_coerce_type(int nargs, Oid *input_typeids, Oid *func_typeids)
                if (typeInheritsFrom(inputTypeId, targetTypeId))
                        continue;
 
+               /* don't choke on references to no-longer-existing types */
+               if (!typeidIsValid(inputTypeId))
+                   return false;
+               if (!typeidIsValid(targetTypeId))
+                   return false;
+
                /*
                 * Else, try for explicit conversion using functions: look for a
                 * single-argument function named with the target type name and