Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit d5a43ff

Browse files
committed
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.
1 parent 02faeb4 commit d5a43ff

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

src/backend/catalog/dependency.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.90 2009/08/07 15:27:56 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/catalog/dependency.c,v 1.91 2009/09/22 15:46:34 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -559,7 +559,8 @@ findDependentObjects(const ObjectAddress *object,
559559
{
560560
char *otherObjDesc;
561561

562-
if (object_address_present(&otherObject, pendingObjects))
562+
if (pendingObjects &&
563+
object_address_present(&otherObject, pendingObjects))
563564
{
564565
systable_endscan(scan);
565566
/* need to release caller's lock; see notes below */

src/test/regress/expected/rules.out

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,10 +1424,10 @@ insert into rule_and_refint_t3 values (1, 12, 11, 'row3');
14241424
insert into rule_and_refint_t3 values (1, 12, 12, 'row4');
14251425
insert into rule_and_refint_t3 values (1, 11, 13, 'row5');
14261426
ERROR: insert or update on table "rule_and_refint_t3" violates foreign key constraint "rule_and_refint_t3_id3a_fkey1"
1427-
DETAIL: Key (id3a,id3c)=(1,13) is not present in table "rule_and_refint_t2".
1427+
DETAIL: Key (id3a, id3c)=(1, 13) is not present in table "rule_and_refint_t2".
14281428
insert into rule_and_refint_t3 values (1, 13, 11, 'row6');
14291429
ERROR: insert or update on table "rule_and_refint_t3" violates foreign key constraint "rule_and_refint_t3_id3a_fkey"
1430-
DETAIL: Key (id3a,id3b)=(1,13) is not present in table "rule_and_refint_t1".
1430+
DETAIL: Key (id3a, id3b)=(1, 13) is not present in table "rule_and_refint_t1".
14311431
create rule rule_and_refint_t3_ins as on insert to rule_and_refint_t3
14321432
where (exists (select 1 from rule_and_refint_t3
14331433
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
14391439
and (rule_and_refint_t3.id3c = new.id3c));
14401440
insert into rule_and_refint_t3 values (1, 11, 13, 'row7');
14411441
ERROR: insert or update on table "rule_and_refint_t3" violates foreign key constraint "rule_and_refint_t3_id3a_fkey1"
1442-
DETAIL: Key (id3a,id3c)=(1,13) is not present in table "rule_and_refint_t2".
1442+
DETAIL: Key (id3a, id3c)=(1, 13) is not present in table "rule_and_refint_t2".
14431443
insert into rule_and_refint_t3 values (1, 13, 11, 'row8');
14441444
ERROR: insert or update on table "rule_and_refint_t3" violates foreign key constraint "rule_and_refint_t3_id3a_fkey"
1445-
DETAIL: Key (id3a,id3b)=(1,13) is not present in table "rule_and_refint_t1".
1445+
DETAIL: Key (id3a, id3b)=(1, 13) is not present in table "rule_and_refint_t1".
1446+
--
1447+
-- disallow dropping a view's rule (bug #5072)
1448+
--
1449+
create view fooview as select 'foo'::text;
1450+
drop rule "_RETURN" on fooview;
1451+
ERROR: cannot drop rule _RETURN on view fooview because view fooview requires it
1452+
HINT: You can drop view fooview instead.
1453+
drop view fooview;
14461454
--
14471455
-- check for planner problems with complex inherited UPDATES
14481456
--

src/test/regress/sql/rules.sql

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,14 @@ create rule rule_and_refint_t3_ins as on insert to rule_and_refint_t3
851851
insert into rule_and_refint_t3 values (1, 11, 13, 'row7');
852852
insert into rule_and_refint_t3 values (1, 13, 11, 'row8');
853853

854+
--
855+
-- disallow dropping a view's rule (bug #5072)
856+
--
857+
858+
create view fooview as select 'foo'::text;
859+
drop rule "_RETURN" on fooview;
860+
drop view fooview;
861+
854862
--
855863
-- check for planner problems with complex inherited UPDATES
856864
--

0 commit comments

Comments
 (0)