drop view race condition - Mailing list pgsql-bugs

From Ed Loehr
Subject drop view race condition
Date
Msg-id 200412051253.15722.ed@LoehrTech.com
Whole thread Raw
List pgsql-bugs
There appears to be a race condition in which dropping a view and replacing
it with an identically-named table inside one transaction while other
transactions are concurrently updating the view/table causes the following
error:

WARNING:  Error occurred while executing PL/pgSQL function f
WARNING:  line 16 at SQL statement
ERROR:  RelationClearRelation: relation NNN deleted while still in use

Here's basically how to reproduce this bug:

create table foo_1...
create table foo_2...  (identical to foo_1)
create view foo as select * from foo_1 union all select * from foo_2;
create "do instead" rule on foo view that redirects foo inserts into foo_2;

create table bar...
create trigger+func that inserts into foo on insert to bar;

Next, start a couple of processes that continually insert one row at a time
into bar as fast as possible (they should result in rows inserted into
foo_1);

Finally, run the following in a transaction:

    begin;
        drop view foo cascade;
        alter table foo_2 rename to foo;
    end;

Sometimes this works without error, but many times it will result in the
above error.  Wratcheting up the number of processes writing to bar seems
to increase the odds of encountering the race condition error.

Ed

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: "invalid memory alloc request size " in deferred trigger causes transaction to fail, but the backend keeps running
Next
From: "Belbin, Peter"
Date:
Subject: solaris 10 with gcc 3.3.2