diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2009-09-22 15:46:43 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2009-09-22 15:46:43 +0000 |
commit | ddf8b7702060f4e29a4f411cb09861e6076cf5c9 (patch) | |
tree | b057631f85cba4c7eaf43a9e32ebd126820a0681 | |
parent | 3141a43605b4a5f87e4ba5e734b0607aa81e765c (diff) | |
download | postgresql-ddf8b7702060f4e29a4f411cb09861e6076cf5c9.tar.gz postgresql-ddf8b7702060f4e29a4f411cb09861e6076cf5c9.zip |
Fix crash if a DROP is attempted on an internally-dependent object.
Introduced in 8.4 rewrite of dependency.c.
Per bug #5072 from Amit Khandekar.
-rw-r--r-- | src/backend/catalog/dependency.c | 5 | ||||
-rw-r--r-- | src/test/regress/expected/rules.out | 8 | ||||
-rw-r--r-- | src/test/regress/sql/rules.sql | 8 |
3 files changed, 19 insertions, 2 deletions
diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index 3de6d5145ed..d35387e7819 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.89.2.1 2009/08/07 15:28:07 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.89.2.2 2009/09/22 15:46:43 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 2667a13e44e..78e3df5871d 100644 --- a/src/test/regress/expected/rules.out +++ b/src/test/regress/expected/rules.out @@ -1444,6 +1444,14 @@ 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". -- +-- 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 -- create table id (id serial primary key, name text); diff --git a/src/test/regress/sql/rules.sql b/src/test/regress/sql/rules.sql index a522d52d199..c7cf788b20e 100644 --- a/src/test/regress/sql/rules.sql +++ b/src/test/regress/sql/rules.sql @@ -852,6 +852,14 @@ 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 -- |