diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index f0d3f03e4a..c3d87ef59e 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.90 2009/08/07 15:27:56 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.91 2009/09/22 15:46:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -559,7 +559,8 @@ findDependentObjects(const ObjectAddress *object, { char *otherObjDesc; - if (object_address_present(&otherObject, pendingObjects)) + if (pendingObjects && + object_address_present(&otherObject, pendingObjects)) { systable_endscan(scan); /* need to release caller's lock; see notes below */ diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out index 2667a13e44..9244376a3b 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1424,10 +1424,10 @@ insert into rule_and_refint_t3 values (1, 12, 11, 'row3'); insert into rule_and_refint_t3 values (1, 12, 12, 'row4'); insert into rule_and_refint_t3 values (1, 11, 13, 'row5'); ERROR: insert or update on table "rule_and_refint_t3" violates foreign key constraint "rule_and_refint_t3_id3a_fkey1" -DETAIL: Key (id3a,id3c)=(1,13) is not present in table "rule_and_refint_t2". +DETAIL: Key (id3a, id3c)=(1, 13) is not present in table "rule_and_refint_t2". insert into rule_and_refint_t3 values (1, 13, 11, 'row6'); ERROR: insert or update on table "rule_and_refint_t3" violates foreign key constraint "rule_and_refint_t3_id3a_fkey" -DETAIL: Key (id3a,id3b)=(1,13) is not present in table "rule_and_refint_t1". +DETAIL: Key (id3a, id3b)=(1, 13) is not present in table "rule_and_refint_t1". create rule rule_and_refint_t3_ins as on insert to rule_and_refint_t3 where (exists (select 1 from rule_and_refint_t3 where (((rule_and_refint_t3.id3a = new.id3a) @@ -1439,10 +1439,18 @@ create rule rule_and_refint_t3_ins as on insert to rule_and_refint_t3 and (rule_and_refint_t3.id3c = new.id3c)); insert into rule_and_refint_t3 values (1, 11, 13, 'row7'); ERROR: insert or update on table "rule_and_refint_t3" violates foreign key constraint "rule_and_refint_t3_id3a_fkey1" -DETAIL: Key (id3a,id3c)=(1,13) is not present in table "rule_and_refint_t2". +DETAIL: Key (id3a, id3c)=(1, 13) is not present in table "rule_and_refint_t2". insert into rule_and_refint_t3 values (1, 13, 11, 'row8'); ERROR: insert or update on table "rule_and_refint_t3" violates foreign key constraint "rule_and_refint_t3_id3a_fkey" -DETAIL: Key (id3a,id3b)=(1,13) is not present in table "rule_and_refint_t1". +DETAIL: Key (id3a, id3b)=(1, 13) is not present in table "rule_and_refint_t1". +-- +-- disallow dropping a view's rule (bug #5072) +-- +create view fooview as select 'foo'::text; +drop rule "_RETURN" on fooview; +ERROR: cannot drop rule _RETURN on view fooview because view fooview requires it +HINT: You can drop view fooview instead. +drop view fooview; -- -- check for planner problems with complex inherited UPDATES -- diff --git a/src/test/regress/sql/rules.sql b/src/test/regress/sql/rules.sql index a522d52d19..c7cf788b20 100644 --- a/src/test/regress/sql/rules.sql +++ b/src/test/regress/sql/rules.sql @@ -851,6 +851,14 @@ create rule rule_and_refint_t3_ins as on insert to rule_and_refint_t3 insert into rule_and_refint_t3 values (1, 11, 13, 'row7'); insert into rule_and_refint_t3 values (1, 13, 11, 'row8'); +-- +-- disallow dropping a view's rule (bug #5072) +-- + +create view fooview as select 'foo'::text; +drop rule "_RETURN" on fooview; +drop view fooview; + -- -- check for planner problems with complex inherited UPDATES --